IP400/Node Firmware/IP400/Src/tod.c
2025-03-28 12:54:00 -06:00

81 lines
1.8 KiB
C

/*---------------------------------------------------------------------------
Project: WL33_NUCLEO_UART
File Name: tod.c
Author: MartinA
Description: Time of Day clock
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version, provided this copyright notice
is included.
Copyright (c) Alberta Digital Radio Communications Society
All rights reserved.
Revision History:
---------------------------------------------------------------------------*/
#include "types.h"
#include "tod.h"
#include "utils.h"
TIMEOFDAY tod = { 0, 0, 0 }; // where we hold the TOD
// routines
void TOD_10SecTimer(void) // 10 second timer
{
// handle seconds
tod.Seconds += 10;
if(tod.Seconds >= 60) {
tod.Minutes += tod.Seconds/60;
tod.Seconds %= 60;
}
// handle minutes
if(tod.Minutes >= 60) {
tod.Hours += tod.Minutes/60;
tod.Minutes %= 60;
}
// handle hours
if(tod.Hours > 24)
tod.Hours %= 24;
}
// return pointer to Time of Day
void getTOD(TIMEOFDAY *time)
{
time->Hours = tod.Hours;
time->Minutes = tod.Minutes;
time->Seconds = tod.Seconds;
}
// set the TOD from HH:MM string
// somewhat brute force parser
BOOL setTOD(char *todString)
{
char *todValues[5];
int nParams = explode_string(todString, todValues, 5, ':', '"');
if(nParams != 2)
return FALSE;
int nHours = ascii2Dec(todValues[0]);
if((nHours < 0) || (nHours > 24))
return FALSE;
int nMins = ascii2Dec(todValues[1]);
if((nHours < 0) || (nHours > 60))
return FALSE;
tod.Hours = nHours;
tod.Minutes = nMins;
tod.Seconds = 0;
return TRUE;
}