105 lines
1.8 KiB
C
Executable File
105 lines
1.8 KiB
C
Executable File
#include <hwo/eeprom.h>
|
|
#include <hwo/systick.h>
|
|
#include <hwo/threads.h>
|
|
|
|
#include <sys/runtime.h>
|
|
#include <sys/events.h>
|
|
|
|
/**
|
|
* @defgroup hwo_core_runtime Betriebsstunden
|
|
* @brief Speicherung der Betriebsstunden.
|
|
*
|
|
* @{
|
|
*/
|
|
volatile struct rt_ram rt_ram;
|
|
|
|
/*! \brief Signal Thread.
|
|
*
|
|
*/
|
|
void runtime_signal(void)
|
|
{
|
|
#if !defined(RUNTIME_USES_THREADING)
|
|
timer_start( rt_ram.timer, 1L );
|
|
#else
|
|
thread_wake( rt_ram.rtThread );
|
|
#endif
|
|
};
|
|
|
|
|
|
|
|
|
|
/*! \brief Runtime-Thread.
|
|
*
|
|
* Ermittelt Betriebsstunden des Geräts
|
|
*/
|
|
void runtime_cycle(void)
|
|
{
|
|
rt_ram.secs_current = systick_secs();
|
|
rt_ram.secs_gone = rt_ram.secs_current - rt_ram.secs_last;
|
|
|
|
rt_ram.eeprom.secs_powered += rt_ram.secs_gone;
|
|
if (rt_ram.flags.is_running)
|
|
rt_ram.eeprom.secs_running += rt_ram.secs_gone;
|
|
|
|
if ((rt_ram.eeprom.next_service != -1L) && (rt_ram.eeprom.next_service <= rt_ram.eeprom.secs_running))
|
|
rt_ram.flags.service_pending = 1;
|
|
else
|
|
rt_ram.flags.service_pending = 0;
|
|
|
|
eeprom_save( rt_ram.bank, (avrEEPROM*)&rt_ram.eeprom.eeprom );
|
|
rt_ram.secs_last = rt_ram.secs_current;
|
|
};
|
|
|
|
|
|
|
|
#if defined(RUNTIME_USES_THREADING)
|
|
|
|
void runtime_thread(void* arg){
|
|
|
|
while (1){
|
|
wait_ms( 10000l );
|
|
runtime_cycle();
|
|
};
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*! \brief Startet Runtime-Thread.
|
|
*
|
|
*/
|
|
void runtime_start(int16_t bank)
|
|
{
|
|
if (!eeprom_load( bank, (avrEEPROM*)&rt_ram.eeprom.eeprom ) || (rt_ram.eeprom.serial.code == -1))
|
|
rt_ram.flags.eeprom_corrupt = 1;
|
|
else
|
|
rt_ram.flags.eeprom_corrupt = 0;
|
|
|
|
rt_ram.eeprom.count_poweron++;
|
|
rt_ram.flags.is_running = 0;
|
|
|
|
eeprom_save( bank, (avrEEPROM*)&rt_ram.eeprom );
|
|
|
|
rt_ram.secs_last = systick_secs();
|
|
rt_ram.bank = bank;
|
|
|
|
#if !defined(RUNTIME_USES_THREADING)
|
|
|
|
rt_ram.timer = timer_create_ex( TIMERID_SYS_RUNTIME, 10000000L, runtime_cycle, TF_REPEAT);
|
|
timer_start( rt_ram.timer, 0 );
|
|
|
|
#else
|
|
|
|
thread_alloc( runtime_thread, NULL, 256 );
|
|
|
|
#endif
|
|
};
|
|
|
|
|
|
|
|
|
|
/** @}
|
|
*/
|