Skip to content

Commit 61951e0

Browse files
committed
Added options to change offset when inverted
1 parent 28712e4 commit 61951e0

File tree

5 files changed

+19
-10
lines changed

5 files changed

+19
-10
lines changed

src/main/io/osd_canvas.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ void osdDrawArtificialHorizonLine(displayCanvas_t *canvas, float pitchAngle, flo
329329
displayCanvasContextPop(canvas);
330330
}
331331

332-
static bool osdCanvasDrawArtificialHorizonWidget(displayPort_t *display, displayCanvas_t *canvas, const osdDrawPoint_t *p, float pitchAngle, float rollAngle)
332+
static bool osdCanvasDrawArtificialHorizonWidget(displayPort_t *display, displayCanvas_t *canvas, const osdDrawPoint_t *p, float pitchAngle, float rollAngle, bool isInverted)
333333
{
334334
UNUSED(display);
335335
UNUSED(p);
@@ -345,7 +345,12 @@ static bool osdCanvasDrawArtificialHorizonWidget(displayPort_t *display, display
345345
int ahiWidth = osdConfig()->ahi_width;
346346
int ahiX = (canvas->width - ahiWidth) / 2;
347347
int ahiHeight = osdConfig()->ahi_height;
348-
int ahiY = ((canvas->height - ahiHeight) / 2) + osdConfig()->ahi_vertical_offset;
348+
int ahiY = ((canvas->height - ahiHeight) / 2);
349+
if (isInverted)
350+
ahiY -= osdConfig()->ahi_vertical_offset;
351+
else
352+
ahiY += osdConfig()->ahi_vertical_offset;
353+
349354
if (ahiY < 0) {
350355
ahiY = 0;
351356
}
@@ -397,7 +402,7 @@ static bool osdCanvasDrawArtificialHorizonWidget(displayPort_t *display, display
397402
return false;
398403
}
399404

400-
void osdCanvasDrawArtificialHorizon(displayPort_t *display, displayCanvas_t *canvas, const osdDrawPoint_t *p, float pitchAngle, float rollAngle)
405+
void osdCanvasDrawArtificialHorizon(displayPort_t *display, displayCanvas_t *canvas, const osdDrawPoint_t *p, float pitchAngle, float rollAngle, bool isInverted)
401406
{
402407
UNUSED(display);
403408
UNUSED(p);
@@ -412,7 +417,7 @@ void osdCanvasDrawArtificialHorizon(displayPort_t *display, displayCanvas_t *can
412417
float totalError = fabsf(prevPitchAngle - pitchAngle) + fabsf(prevRollAngle - rollAngle);
413418
if ((now > nextDrawMinMs && totalError > 0.05f)|| now > nextDrawMaxMs) {
414419

415-
if (!osdCanvasDrawArtificialHorizonWidget(display, canvas, p, pitchAngle, rollAngle)) {
420+
if (!osdCanvasDrawArtificialHorizonWidget(display, canvas, p, pitchAngle, rollAngle, isInverted)) {
416421
switch ((osd_ahi_style_e)osdConfig()->ahi_style) {
417422
case OSD_AHI_STYLE_DEFAULT:
418423
{

src/main/io/osd_canvas.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@ typedef struct osdDrawPoint_s osdDrawPoint_t;
3434

3535
void osdCanvasDrawVario(displayPort_t *display, displayCanvas_t *canvas, const osdDrawPoint_t *p, float zvel);
3636
void osdCanvasDrawDirArrow(displayPort_t *display, displayCanvas_t *canvas, const osdDrawPoint_t *p, float degrees);
37-
void osdCanvasDrawArtificialHorizon(displayPort_t *display, displayCanvas_t *canvas, const osdDrawPoint_t *p, float pitchAngle, float rollAngle);
37+
void osdCanvasDrawArtificialHorizon(displayPort_t *display, displayCanvas_t *canvas, const osdDrawPoint_t *p, float pitchAngle, float rollAngle, bool isInverted);
3838
void osdCanvasDrawHeadingGraph(displayPort_t *display, displayCanvas_t *canvas, const osdDrawPoint_t *p, int heading);
3939
bool osdCanvasDrawSidebars(displayPort_t *display, displayCanvas_t *canvas);

src/main/io/osd_common.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,18 +147,21 @@ void osdDrawArtificialHorizon(displayPort_t *display, displayCanvas_t *canvas, c
147147
{
148148
uint8_t gx;
149149
uint8_t gy;
150+
bool isInverted = false;
150151

151152
// Correct pitch when inverted
152-
if (rollAngle < -1.570796f || rollAngle > 1.570796f)
153+
if (rollAngle < -1.570796f || rollAngle > 1.570796f) {
154+
isInverted = true;
153155
pitchAngle = -pitchAngle;
156+
}
154157

155158
#if defined(USE_CANVAS)
156159
if (canvas) {
157-
osdCanvasDrawArtificialHorizon(display, canvas, p, pitchAngle, rollAngle);
160+
osdCanvasDrawArtificialHorizon(display, canvas, p, pitchAngle, rollAngle, isInverted);
158161
} else {
159162
#endif
160163
osdDrawPointGetGrid(&gx, &gy, display, canvas, p);
161-
osdGridDrawArtificialHorizon(display, gx, gy, pitchAngle, rollAngle);
164+
osdGridDrawArtificialHorizon(display, gx, gy, pitchAngle, rollAngle, isInverted);
162165
#if defined(USE_CANVAS)
163166
}
164167
#endif

src/main/io/osd_grid.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,11 @@ static float osdGetAspectRatioCorrection(void)
109109
return osdDisplayIsPAL() ? 12.0f/15.0f : 12.0f/18.46f;
110110
}
111111

112-
void osdGridDrawArtificialHorizon(displayPort_t *display, unsigned gx, unsigned gy, float pitchAngle, float rollAngle)
112+
void osdGridDrawArtificialHorizon(displayPort_t *display, unsigned gx, unsigned gy, float pitchAngle, float rollAngle, bool isInverted)
113113
{
114114
UNUSED(gx);
115115
UNUSED(gy);
116+
UNUSED(isInverted);
116117

117118
uint8_t elemPosX;
118119
uint8_t elemPosY;

src/main/io/osd_grid.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@ typedef struct displayPort_s displayPort_t;
3030

3131
void osdGridDrawVario(displayPort_t *display, unsigned gx, unsigned gy, float zvel);
3232
void osdGridDrawDirArrow(displayPort_t *display, unsigned gx, unsigned gy, float degrees);
33-
void osdGridDrawArtificialHorizon(displayPort_t *display, unsigned gx, unsigned gy, float pitchAngle, float rollAngle);
33+
void osdGridDrawArtificialHorizon(displayPort_t *display, unsigned gx, unsigned gy, float pitchAngle, float rollAngle, bool isInverted);
3434
void osdGridDrawHeadingGraph(displayPort_t *display, unsigned gx, unsigned gy, int heading);
3535
void osdGridDrawSidebars(displayPort_t *display);

0 commit comments

Comments
 (0)