//#DOC Main, program entry and main loop
#include "main.h"
#include <otRTC.h>
#include <otSerial.h>
#include <otTimer.h>
#include <otPrintfLite.h>
#include <otILI9341.h>
#include "nixie.h"
#include "nixieL.h"
otILI9341 tft;
void displayTime(const char * buf, int xp, int yp)
{
const unsigned short * ptr;
for(int i = 0; i < 8; i++)
{
if(i == 2 || i == 5)
xp += 10;
else
{
switch(buf[i])
{
case '0': if(i == 0) ptr = nixieL_10;
else ptr = nixieL_00;
break;
case '1': ptr = nixieL_01;
break;
case '2': ptr = nixieL_02;
break;
case '3': ptr = nixieL_03;
break;
case '4': ptr = nixieL_04;
break;
case '5': ptr = nixieL_05;
break;
case '6': ptr = nixieL_06;
break;
case '7': ptr = nixieL_07;
break;
case '8': ptr = nixieL_08;
break;
case '9': ptr = nixieL_09;
break;
}
tft.draw565Bitmap(xp, yp, ptr, 50, 78);
xp += 50;
}
}
}
void displayDate(const char * buf, int xp, int yp)
{
const unsigned short * ptr;
for(int i = 0; i < 10; i++)
{
if(i == 4 || i == 7)
xp += 4;
else
{
switch(buf[i])
{
case '0': if(i == 5 || i == 8) ptr = nixie_10;
else ptr = nixie_00;
break;
case '1': ptr = nixie_01;
break;
case '2': ptr = nixie_02;
break;
case '3': ptr = nixie_03;
break;
case '4': ptr = nixie_04;
break;
case '5': ptr = nixie_05;
break;
case '6': ptr = nixie_06;
break;
case '7': ptr = nixie_07;
break;
case '8': ptr = nixie_08;
break;
case '9': ptr = nixie_09;
break;
}
tft.draw565Bitmap(xp, yp, ptr, 38, 59);
xp += 38;
}
}
}
void setup()
{
UartEnableSignals(UART0);
UartSetBaud(UART0, 115200);
setStdout(UART0); // printf output is now directed on UART0
tft.init();
tft.setRotation(otILI9341::IR_270);
tft.clear();
RtcOn();
RtcSetDate(2020, 4, 4);
RtcSetTime(9, 50, 0);
}
void loop()
{
U8 h, m, s;
int yy, mm, dd;
char buf[16];
while(1)
{
DelayMs(1000);
RtcGetTime(&h, &m, &s);
RtcGetDate(&yy, &mm, &dd);
sprintf(buf, "%02d:%02d:%02d", h, m, s);
displayTime(buf, 0, 34);
printf("%s - ", buf);
sprintf(buf, "%04d/%02d/%02d", yy, mm, dd);
displayDate(buf, 0, 146);
printf("%s\n", buf);
}
}