#include "main.h"
#include "nmea.h"
#include <cstring>
#include "libOLED/stm32_halDisplay.H"
#include "libOLED/fontclass.H"
#include "libOLED/displayDial.H"
namespace
{
int const WIDTH = 128;
int const HEIGHT = 64;
int const DISPLAY_RAMWIDTH = 132;
}
int heading = 0;
Location loc;
uint8_t displayBuffer[dataSize (WIDTH, HEIGHT)];
stm32_halDisplay_t display1 (WIDTH, HEIGHT, DISPLAY_RAMWIDTH, displayBuffer,
&hspi1,
SPI_CD_GPIO_Port,
SPI_CD_Pin,
SPI_RESET_GPIO_Port,
SPI_RESET_Pin,
SPI_NSS1_GPIO_Port,
SPI_NSS1_Pin);
displayDial_t dial (display1, 96, 32, 32, 180);
extern "C" void
cc_init ()
{
display1.init ();
display1.clearDisplay ();
dial.draw_scale (0, 360, 8, 1, 45);
display1.display ();
memset(loc.time,'-',6 );
}
char fontBuf[] = "01234567";
extern "C" void
cc_run ()
{
display1.clearDisplay ();
dial.draw_scale (0, 360, 8, 1, 45);
bool stat = updateLocation (&loc);
if (loc.good)
{
heading = loc.heading;
loc.good = false;
}
display1.gotoxy (0, 0);
display1.printString (small_font, &loc.time[0], 2, WHITE);
display1.printString (small_font, ":",1, WHITE);
display1.printString (small_font, &loc.time[2], 2, WHITE);
display1.printString (small_font, ":",1, WHITE);
display1.printString (small_font, &loc.time[4], 2, WHITE);
int dial_ang = heading + 180;
dial.draw_needle (dial_ang);
display1.gotoxy (70, 25);
if (loc.valid)
{
display1.fontDigits (large_font, 3, -1, heading);
}
else
display1.printString (large_font, "GPS?", 4, WHITE);
display1.gotoxy (0, 8);
display1.printString (small_font, fontBuf, 8, WHITE);
display1.gotoxy (0, 16);
display1.printScaledString (small_font, fontBuf, 5, 128, WHITE);
display1.gotoxy (0, 48);
display1.printScaledString (large_font, fontBuf, 5, 256, WHITE);
for (size_t i = 0; i < sizeof(fontBuf); i++)
{
if ((++fontBuf[i]) == 128)
fontBuf[i] = ' ';
}
display1.display ();
}