1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-21 23:35:17 +03:00
This commit is contained in:
bsongis 2015-02-14 18:26:08 +01:00
parent ae16191e76
commit 895bc26f77
6 changed files with 67 additions and 0 deletions

View file

@ -869,6 +869,8 @@ QString CustomFunctionData::funcToString()
return QObject::tr("Volume"); return QObject::tr("Volume");
else if (func == FuncBacklight) else if (func == FuncBacklight)
return QObject::tr("Backlight"); return QObject::tr("Backlight");
else if (func == FuncScreenshot)
return QObject::tr("Screenshot");
else if (func == FuncBackgroundMusic) else if (func == FuncBackgroundMusic)
return QObject::tr("Background Music"); return QObject::tr("Background Music");
else if (func == FuncBackgroundMusicPause) else if (func == FuncBackgroundMusicPause)

View file

@ -641,6 +641,7 @@ enum AssignFunc {
FuncLogs, FuncLogs,
FuncVolume, FuncVolume,
FuncBacklight, FuncBacklight,
FuncScreenshot,
FuncBackgroundMusic, FuncBackgroundMusic,
FuncBackgroundMusicPause, FuncBackgroundMusicPause,
FuncAdjustGV1, FuncAdjustGV1,

View file

@ -1911,6 +1911,8 @@ class CustomFunctionsConversionTable: public ConversionTable {
if (board == BOARD_GRUVIN9X || IS_ARM(board) ) if (board == BOARD_GRUVIN9X || IS_ARM(board) )
addConversion(FuncLogs, val++); addConversion(FuncLogs, val++);
addConversion(FuncBacklight, val++); addConversion(FuncBacklight, val++);
if (IS_TARANIS(board))
addConversion(FuncScreenshot, val++);
} }
else { else {
addConversion(FuncPlaySound, val++); addConversion(FuncPlaySound, val++);

View file

@ -203,3 +203,54 @@ const pm_char * bmpLoad(uint8_t *bmp, const char *filename, const unsigned int w
f_close(&bmpFile); f_close(&bmpFile);
return 0; return 0;
} }
const uint8_t bmpHeader[] = {
0x42, 0x4d, 0xF8, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x28, 0x00,
0x00, 0x00, 212, 0x00, 0x00, 0x00, 64, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 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, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22,
0x22, 0x00, 0x33, 0x33, 0x33, 0x00, 0x44, 0x44, 0x44, 0x00, 0x55, 0x55, 0x55, 0x00, 0x66, 0x66,
0x66, 0x00, 0x77, 0x77, 0x77, 0x00, 0x88, 0x88, 0x88, 0x00, 0x99, 0x99, 0x99, 0x00, 0xaa, 0xaa,
0xaa, 0x00, 0xbb, 0xbb, 0xbb, 0x00, 0xcc, 0xcc, 0xcc, 0x00, 0xdd, 0xdd, 0xdd, 0x00, 0xee, 0xee,
0xee, 0x00, 0xff, 0xff, 0xff, 0x00
};
inline display_t getPixel(int x, int y)
{
if (x>=LCD_W || y>=LCD_H)
return 0;
display_t * p = &displayBuf[y / 2 * LCD_W + x];
return (y & 1) ? (*p >> 4) : (*p & 0x0F);
}
const char *writeScreenshot(const char *filename)
{
FIL bmpFile;
UINT written;
FRESULT result = f_open(&bmpFile, filename, FA_CREATE_ALWAYS | FA_WRITE);
if (result != FR_OK) {
return SDCARD_ERROR(result);
}
result = f_write(&bmpFile, bmpHeader, sizeof(bmpHeader), &written);
if (result != FR_OK || written != sizeof(bmpHeader)) {
f_close(&bmpFile);
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) {
f_close(&bmpFile);
return SDCARD_ERROR(result);
}
}
}
f_close(&bmpFile);
return NULL;
}

View file

@ -543,6 +543,14 @@ void evalFunctions()
newActiveFunctions |= (1 << FUNCTION_BACKLIGHT); newActiveFunctions |= (1 << FUNCTION_BACKLIGHT);
break; break;
#if defined(PCBTARANIS)
case FUNC_SCREENSHOT:
if (!(functionsContext.activeSwitches & switch_mask)) {
writeScreenshot("screenshot.bmp");
}
break;
#endif
#if defined(DEBUG) #if defined(DEBUG)
case FUNC_TEST: case FUNC_TEST:
testFunc(); testFunc();

View file

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