2017-10-06 05:25:30 +02:00
|
|
|
#include "dump1090.h"
|
|
|
|
#include "structs.h"
|
|
|
|
#include "parula.h"
|
|
|
|
#include "monokai.h"
|
2019-09-08 01:11:20 +02:00
|
|
|
#include "SDL2/SDL2_gfxPrimitives.h"
|
2017-10-06 05:25:30 +02:00
|
|
|
|
|
|
|
void updateStatus() {
|
2019-09-09 06:23:38 +02:00
|
|
|
// struct aircraft *a = Modes.aircrafts;
|
2017-10-06 05:25:30 +02:00
|
|
|
|
|
|
|
int numVisiblePlanes = 0;
|
|
|
|
double maxDist = 0;
|
|
|
|
int totalCount = 0;
|
|
|
|
double sigAccumulate = 0.0;
|
|
|
|
double msgRateAccumulate = 0.0;
|
|
|
|
|
|
|
|
|
2020-03-08 02:22:20 +01:00
|
|
|
// PlaneObj *p = appData.planes;
|
2017-10-06 05:25:30 +02:00
|
|
|
|
2020-03-08 02:22:20 +01:00
|
|
|
// while(p) {
|
|
|
|
// unsigned char * pSig = p->signalLevel;
|
|
|
|
// unsigned int signalAverage = (pSig[0] + pSig[1] + pSig[2] + pSig[3] +
|
|
|
|
// pSig[4] + pSig[5] + pSig[6] + pSig[7]);
|
2017-10-06 05:25:30 +02:00
|
|
|
|
2020-03-08 02:22:20 +01:00
|
|
|
// sigAccumulate += signalAverage;
|
2019-09-09 06:52:09 +02:00
|
|
|
|
2020-03-08 02:22:20 +01:00
|
|
|
// if (p->lon && p->lat) {
|
|
|
|
// numVisiblePlanes++;
|
|
|
|
// }
|
2019-09-09 06:23:38 +02:00
|
|
|
|
2020-03-08 02:22:20 +01:00
|
|
|
// totalCount++;
|
2019-09-09 06:23:38 +02:00
|
|
|
|
2020-03-08 02:22:20 +01:00
|
|
|
// msgRateAccumulate += p->messageRate;
|
2019-09-09 06:23:38 +02:00
|
|
|
|
2020-03-08 02:22:20 +01:00
|
|
|
// p = p->next;
|
|
|
|
// }
|
2017-10-06 05:25:30 +02:00
|
|
|
|
|
|
|
Status.msgRate = msgRateAccumulate;
|
|
|
|
Status.avgSig = sigAccumulate / (double) totalCount;
|
|
|
|
Status.numPlanes = totalCount;
|
|
|
|
Status.numVisiblePlanes = numVisiblePlanes;
|
|
|
|
Status.maxDist = maxDist;
|
|
|
|
}
|
|
|
|
|
|
|
|
void drawStatusBox(int *left, int *top, char *label, char *message, SDL_Color color) {
|
2019-09-09 06:23:38 +02:00
|
|
|
int labelWidth = (strlen(label) + ((strlen(label) > 0 ) ? 1 : 0)) * appData.labelFontWidth;
|
|
|
|
int messageWidth = (strlen(message) + ((strlen(message) > 0 ) ? 1 : 0)) * appData.messageFontWidth;
|
2017-10-06 05:25:30 +02:00
|
|
|
|
2019-09-09 06:23:38 +02:00
|
|
|
if(*left + labelWidth + messageWidth + PAD > appData.screen_width) {
|
2017-10-06 05:25:30 +02:00
|
|
|
*left = PAD;
|
2019-09-09 06:23:38 +02:00
|
|
|
*top = *top - appData.messageFontHeight - PAD;
|
2017-10-06 05:25:30 +02:00
|
|
|
}
|
|
|
|
|
2017-10-06 18:34:36 +02:00
|
|
|
// filled black background
|
2017-10-06 05:25:30 +02:00
|
|
|
if(messageWidth) {
|
2019-09-09 06:23:38 +02:00
|
|
|
roundedBoxRGBA(appData.renderer, *left, *top, *left + labelWidth + messageWidth, *top + appData.messageFontHeight, ROUND_RADIUS, black.r, black.g, black.b, SDL_ALPHA_OPAQUE);
|
2017-10-06 05:25:30 +02:00
|
|
|
}
|
|
|
|
|
2017-10-06 18:34:36 +02:00
|
|
|
// filled label box
|
|
|
|
if(labelWidth) {
|
2019-09-09 06:23:38 +02:00
|
|
|
roundedBoxRGBA(appData.renderer, *left, *top, *left + labelWidth, *top + appData.messageFontHeight, ROUND_RADIUS,color.r, color.g, color.b, SDL_ALPHA_OPAQUE);
|
2017-10-06 18:34:36 +02:00
|
|
|
}
|
2017-10-06 05:25:30 +02:00
|
|
|
|
2017-10-06 18:34:36 +02:00
|
|
|
// outline message box
|
2017-10-06 05:25:30 +02:00
|
|
|
if(messageWidth) {
|
2019-09-09 06:23:38 +02:00
|
|
|
roundedRectangleRGBA(appData.renderer, *left, *top, *left + labelWidth + messageWidth, *top + appData.messageFontHeight, ROUND_RADIUS,color.r, color.g, color.b, SDL_ALPHA_OPAQUE);
|
2017-10-06 05:25:30 +02:00
|
|
|
}
|
|
|
|
|
2019-09-09 06:23:38 +02:00
|
|
|
drawString(label, *left + appData.labelFontWidth/2, *top, appData.labelFont, black);
|
2017-10-06 18:34:36 +02:00
|
|
|
|
|
|
|
//message
|
2019-09-09 06:23:38 +02:00
|
|
|
drawString(message, *left + labelWidth + appData.messageFontWidth/2, *top, appData.messageFont, color);
|
2017-10-06 05:25:30 +02:00
|
|
|
|
|
|
|
*left = *left + labelWidth + messageWidth + PAD;
|
|
|
|
}
|
|
|
|
|
2017-10-10 22:56:05 +02:00
|
|
|
|
2019-09-08 21:29:21 +02:00
|
|
|
|
|
|
|
void drawButtonBox(int *left, int *top, char *label, SDL_Color color) {
|
2019-09-09 06:23:38 +02:00
|
|
|
int labelWidth = (strlen(label) + ((strlen(label) > 0 ) ? 1 : 0)) * appData.labelFontWidth;
|
2019-09-08 21:29:21 +02:00
|
|
|
|
|
|
|
//newline if no message or label
|
|
|
|
if(strlen(label) == 0) {
|
2019-09-09 06:23:38 +02:00
|
|
|
boxRGBA(appData.renderer, *left, *top, appData.screen_width - PAD, *top + appData.messageFontHeight,0, 0, 0, 0);
|
2019-09-08 21:29:21 +02:00
|
|
|
*left = PAD;
|
2019-09-09 06:23:38 +02:00
|
|
|
*top = *top - appData.messageFontHeight - PAD;
|
2019-09-08 21:29:21 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-09-09 06:23:38 +02:00
|
|
|
if(*left + labelWidth + PAD > appData.screen_width) {
|
2019-09-08 21:29:21 +02:00
|
|
|
*left = PAD;
|
2019-09-09 06:23:38 +02:00
|
|
|
*top = *top - appData.messageFontHeight - PAD;
|
2019-09-08 21:29:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// outline message box
|
|
|
|
if(labelWidth) {
|
|
|
|
|
2019-09-09 06:23:38 +02:00
|
|
|
roundedRectangleRGBA(appData.renderer, *left, *top , *left + labelWidth - 1, *top + appData.messageFontHeight - 1, ROUND_RADIUS, 255, 255, 255, SDL_ALPHA_OPAQUE);
|
|
|
|
roundedRectangleRGBA(appData.renderer, *left + 1, *top + 1, *left + labelWidth , *top + appData.messageFontHeight, ROUND_RADIUS, 20, 20, 20, SDL_ALPHA_OPAQUE);
|
|
|
|
roundedBoxRGBA(appData.renderer, *left + 1, *top + 1, *left + labelWidth - 1, *top + appData.messageFontHeight - 1, ROUND_RADIUS, color.r, color.g, color.b, SDL_ALPHA_OPAQUE);
|
2019-09-08 21:29:21 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2019-09-09 06:23:38 +02:00
|
|
|
drawString(label, *left + appData.labelFontWidth/2, *top, appData.labelFont, black);
|
2019-09-08 21:29:21 +02:00
|
|
|
|
|
|
|
*left = *left + labelWidth + PAD;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-10-10 22:56:05 +02:00
|
|
|
void drawBattery(int *left, int *top, double level) {
|
|
|
|
int lineWidth = 1;
|
|
|
|
|
|
|
|
int pointCount = 9;
|
|
|
|
float xList[9] = {0.0, 0.25, 0.25, 0.75, 0.75, 1.0, 1.0, 0.0, 0.0};
|
|
|
|
float yList[9] = {0.2, 0.2, 0.0, 0.0, 0.2, 0.2, 1.0, 1.0, 0.2};
|
|
|
|
|
|
|
|
for(int k = 0; k < pointCount - 1; k++) {
|
2019-09-09 06:23:38 +02:00
|
|
|
thickLineRGBA(appData.renderer,
|
|
|
|
*left + appData.messageFontWidth * xList[k],
|
|
|
|
*top + appData.messageFontHeight * yList[k],
|
|
|
|
*left + appData.messageFontWidth * xList[k+1],
|
|
|
|
*top + appData.messageFontHeight * yList[k+1],
|
2017-10-10 22:56:05 +02:00
|
|
|
lineWidth, grey.r, grey.g, grey.b, SDL_ALPHA_OPAQUE);
|
|
|
|
}
|
|
|
|
|
2019-09-09 06:23:38 +02:00
|
|
|
boxRGBA(appData.renderer, *left, *top + (0.2 + 0.8 * (1.0 - level)) * appData.messageFontHeight, *left + appData.messageFontWidth, *top + appData.messageFontHeight, grey.r, grey.g, grey.b, SDL_ALPHA_OPAQUE);
|
2017-10-10 22:56:05 +02:00
|
|
|
|
2019-09-09 06:23:38 +02:00
|
|
|
*left = *left + appData.messageFontWidth;
|
2017-10-10 22:56:05 +02:00
|
|
|
}
|
|
|
|
|
2017-10-06 05:25:30 +02:00
|
|
|
void drawStatus() {
|
|
|
|
|
2019-09-22 03:46:52 +02:00
|
|
|
int left = PAD;
|
|
|
|
int top = appData.screen_height - appData.messageFontHeight - PAD;
|
2017-10-06 18:34:36 +02:00
|
|
|
|
|
|
|
char strLoc[20] = " ";
|
2019-09-09 06:23:38 +02:00
|
|
|
snprintf(strLoc, 20, "%3.3fN %3.3f%c", appData.centerLat, fabs(appData.centerLon),(appData.centerLon > 0) ? 'E' : 'W');
|
2020-03-07 05:51:47 +01:00
|
|
|
drawStatusBox(&left, &top, "loc", strLoc, style.buttonColor);
|
2017-10-06 05:25:30 +02:00
|
|
|
|
|
|
|
char strPlaneCount[10] = " ";
|
|
|
|
snprintf(strPlaneCount, 10,"%d/%d", Status.numVisiblePlanes, Status.numPlanes);
|
2020-03-07 05:51:47 +01:00
|
|
|
drawStatusBox(&left, &top, "disp", strPlaneCount, style.buttonColor);
|
2017-10-06 05:25:30 +02:00
|
|
|
|
|
|
|
char strMsgRate[18] = " ";
|
2017-10-06 18:34:36 +02:00
|
|
|
snprintf(strMsgRate, 18,"%.0f/s", Status.msgRate);
|
2020-03-07 05:51:47 +01:00
|
|
|
drawStatusBox(&left, &top, "rate", strMsgRate, style.buttonColor);
|
2017-10-06 05:25:30 +02:00
|
|
|
|
|
|
|
char strSig[18] = " ";
|
|
|
|
snprintf(strSig, 18, "%.0f%%", 100.0 * Status.avgSig / 1024.0);
|
2020-03-07 05:51:47 +01:00
|
|
|
drawStatusBox(&left, &top, "sAvg", strSig, style.buttonColor);
|
|
|
|
|
2017-10-06 05:25:30 +02:00
|
|
|
}
|