Started adding an event layer.
This commit is contained in:
@@ -69,6 +69,7 @@
|
||||
mqtt
|
||||
hexfile
|
||||
data
|
||||
events
|
||||
</subdirs>
|
||||
|
||||
|
||||
@@ -79,6 +80,7 @@
|
||||
aqhmqtt
|
||||
aqhhexfile
|
||||
aqhdata
|
||||
aqhevents
|
||||
</useTargets>
|
||||
|
||||
<libraries>
|
||||
|
||||
87
aqhome/events/0BUILD
Normal file
87
aqhome/events/0BUILD
Normal file
@@ -0,0 +1,87 @@
|
||||
<?xml?>
|
||||
|
||||
<gwbuild>
|
||||
|
||||
<target type="ConvenienceLibrary" name="aqhevents" >
|
||||
|
||||
<includes type="c" >
|
||||
$(gwenhywfar_cflags)
|
||||
$(aqdatabase_cflags)
|
||||
-I$(topsrcdir)
|
||||
-I$(topbuilddir)
|
||||
</includes>
|
||||
|
||||
<includes type="tm2" >
|
||||
--include=$(builddir)
|
||||
--include=$(srcdir)
|
||||
--include=$(aqdatabase_AQDATABASE_TYPEMAKERDIR)/c
|
||||
</includes>
|
||||
|
||||
|
||||
<define name="BUILDING_AQHOME" />
|
||||
|
||||
<setVar name="local/cflags">$(visibility_cflags)</setVar>
|
||||
|
||||
|
||||
<setVar name="tm2flags" >
|
||||
--api=AQHOME_API
|
||||
</setVar>
|
||||
|
||||
<setVar name="local/typefiles" >
|
||||
</setVar>
|
||||
|
||||
<setVar name="local/built_sources" >
|
||||
</setVar>
|
||||
|
||||
<setVar name="local/built_headers_pub">
|
||||
</setVar>
|
||||
|
||||
|
||||
<setVar name="local/built_headers_priv" >
|
||||
</setVar>
|
||||
|
||||
|
||||
<headers dist="false" install="$(pkgincludedir)/data" >
|
||||
$(local/built_headers_pub)
|
||||
</headers>
|
||||
|
||||
|
||||
<headers dist="true" install="$(pkgincludedir)/data" >
|
||||
eventsubscription.h
|
||||
timer.h
|
||||
eventhandler.h
|
||||
</headers>
|
||||
|
||||
|
||||
<headers dist="true" >
|
||||
eventsubscription_p.h
|
||||
timer_p.h
|
||||
eventhandler_p.h
|
||||
</headers>
|
||||
|
||||
|
||||
<sources>
|
||||
$(local/typefiles)
|
||||
|
||||
eventsubscription.c
|
||||
timer.c
|
||||
eventhandler.c
|
||||
</sources>
|
||||
|
||||
|
||||
<extradist>
|
||||
</extradist>
|
||||
|
||||
|
||||
<useTargets>
|
||||
</useTargets>
|
||||
|
||||
<subdirs>
|
||||
</subdirs>
|
||||
|
||||
|
||||
|
||||
|
||||
</target>
|
||||
|
||||
</gwbuild>
|
||||
138
aqhome/events/eventhandler.c
Normal file
138
aqhome/events/eventhandler.c
Normal file
@@ -0,0 +1,138 @@
|
||||
/****************************************************************************
|
||||
* This file is part of the project Gwenhywfar.
|
||||
* Gwenhywfar (c) by 2023 Martin Preuss, all rights reserved.
|
||||
*
|
||||
* The license for this file can be found in the file COPYING which you
|
||||
* should have received along with this file.
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "./eventhandler_p.h"
|
||||
|
||||
#include <gwenhywfar/debug.h>
|
||||
|
||||
|
||||
|
||||
GWEN_INHERIT_FUNCTIONS(AQH_EVENT_HANDLER)
|
||||
GWEN_LIST_FUNCTIONS(AQH_EVENT_HANDLER, AQH_EventHandler)
|
||||
|
||||
|
||||
|
||||
|
||||
AQH_EVENT_HANDLER *AQH_EventHandler_new()
|
||||
{
|
||||
AQH_EVENT_HANDLER *evh;
|
||||
|
||||
GWEN_NEW_OBJECT(AQH_EVENT_HANDLER, evh);
|
||||
GWEN_INHERIT_INIT(AQH_EVENT_HANDLER, evh);
|
||||
GWEN_LIST_INIT(AQH_EVENT_HANDLER, evh);
|
||||
|
||||
evh->timerList=AQH_EventTimer_List_new();
|
||||
evh->subscriptionList=AQH_EventSubscription_List_new();
|
||||
|
||||
return evh;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventHandler_free(AQH_EVENT_HANDLER *evh)
|
||||
{
|
||||
if (evh) {
|
||||
GWEN_LIST_FINI(AQH_EVENT_HANDLER, evh);
|
||||
GWEN_INHERIT_FINI(AQH_EVENT_HANDLER, evh);
|
||||
|
||||
AQH_EventSubscription_List_free(evh->subscriptionList);
|
||||
AQH_EventTimer_List_free(evh->timerList);
|
||||
GWEN_FREE_OBJECT(evh);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
AQH_EVENT_TIMER_LIST *AQH_EventHandler_GetTimerList(const AQH_EVENT_HANDLER *evh)
|
||||
{
|
||||
return evh?evh->timerList:NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventHandler_AddTimer(AQH_EVENT_HANDLER *evh, AQH_EVENT_TIMER *evt)
|
||||
{
|
||||
if (evh && evt) {
|
||||
AQH_EventTimer_SetId(evt, ++(evh->lastTimerId));
|
||||
AQH_EventTimer_List_Add(evt, evh->timerList);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
AQH_EVENT_SUBSCRIPTION_LIST *AQH_EventHandler_GetSubscriptionList(const AQH_EVENT_HANDLER *evh)
|
||||
{
|
||||
return evh?evh->subscriptionList:NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventHandler_AddSubscription(AQH_EVENT_HANDLER *evh, AQH_EVENT_SUBSCRIPTION *evs)
|
||||
{
|
||||
if (evh && evs)
|
||||
AQH_EventSubscription_List_Add(evs, evh->subscriptionList);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventHandler_HandleTimeTick(AQH_EVENT_HANDLER *evh, uint64_t t)
|
||||
{
|
||||
if (evh) {
|
||||
AQH_EVENT_TIMER *evt;
|
||||
|
||||
evt=AQH_EventTimer_List_First(evh->timerList);
|
||||
while(evt) {
|
||||
AQH_EVENT_TIMER *evtNext;
|
||||
|
||||
evtNext=AQH_EventTimer_List_Next(evt);
|
||||
if (AQH_EventTimer_CheckWhetherTickTriggers(evt, t)) {
|
||||
AQH_EventHandler_HandleEvent(evh, AQH_EventTimer_GetEventType(evt), AQH_EventTimer_GetId(evt));
|
||||
if (AQH_EventTimer_GetFlags(evt) & AQH_EVENT_TIMER_FLAGS_DELETE_IF_TRIGGERED) {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Deleting timer after trigger");
|
||||
AQH_EventTimer_List_Del(evt);
|
||||
AQH_EventTimer_free(evt);
|
||||
}
|
||||
}
|
||||
evt=evtNext;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventHandler_HandleEvent(AQH_EVENT_HANDLER *evh, int eventType, uint64_t objectId)
|
||||
{
|
||||
if (evh) {
|
||||
AQH_EVENT_SUBSCRIPTION *evs;
|
||||
|
||||
evs=AQH_EventSubscription_List_First(evh->subscriptionList);
|
||||
while(evs) {
|
||||
if (AQH_EventSubscription_GetEventType(evs)==eventType) {
|
||||
int objectIdFromSubscription;
|
||||
|
||||
objectIdFromSubscription=AQH_EventSubscription_GetObjectId(evs);
|
||||
if (objectIdFromSubscription==0 || objectIdFromSubscription==objectId)
|
||||
AQH_EventSubscription_CallHandler(evs, eventType, objectId);
|
||||
}
|
||||
|
||||
evs=AQH_EventSubscription_List_Next(evs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
46
aqhome/events/eventhandler.h
Normal file
46
aqhome/events/eventhandler.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/****************************************************************************
|
||||
* This file is part of the project Gwenhywfar.
|
||||
* Gwenhywfar (c) by 2023 Martin Preuss, all rights reserved.
|
||||
*
|
||||
* The license for this file can be found in the file COPYING which you
|
||||
* should have received along with this file.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef AQH_EVENT_HANDLER_H
|
||||
#define AQH_EVENT_HANDLER_H
|
||||
|
||||
|
||||
#include "aqhome/api.h"
|
||||
|
||||
#include <gwenhywfar/inherit.h>
|
||||
#include <gwenhywfar/list.h>
|
||||
|
||||
|
||||
|
||||
typedef struct AQH_EVENT_HANDLER AQH_EVENT_HANDLER;
|
||||
GWEN_INHERIT_FUNCTION_LIB_DEFS(AQH_EVENT_HANDLER, AQHOME_API)
|
||||
GWEN_LIST_FUNCTION_LIB_DEFS(AQH_EVENT_HANDLER, AQH_EventHandler, AQHOME_API)
|
||||
|
||||
#include "aqhome/events/timer.h"
|
||||
#include "aqhome/events/eventsubscription.h"
|
||||
|
||||
|
||||
|
||||
AQHOME_API AQH_EVENT_HANDLER *AQH_EventHandler_new();
|
||||
AQHOME_API void AQH_EventHandler_free(AQH_EVENT_HANDLER *evh);
|
||||
|
||||
AQHOME_API AQH_EVENT_TIMER_LIST *AQH_EventHandler_GetTimerList(const AQH_EVENT_HANDLER *evh);
|
||||
AQHOME_API void AQH_EventHandler_AddTimer(AQH_EVENT_HANDLER *evh, AQH_EVENT_TIMER *evt);
|
||||
|
||||
AQHOME_API AQH_EVENT_SUBSCRIPTION_LIST *AQH_EventHandler_GetSubscriptionList(const AQH_EVENT_HANDLER *evh);
|
||||
AQHOME_API void AQH_EventHandler_AddSubscription(AQH_EVENT_HANDLER *evh, AQH_EVENT_SUBSCRIPTION *evs);
|
||||
|
||||
|
||||
AQHOME_API void AQH_EventHandler_HandleTimeTick(AQH_EVENT_HANDLER *evh, uint64_t t);
|
||||
AQHOME_API void AQH_EventHandler_HandleEvent(AQH_EVENT_HANDLER *evh, int eventType, uint64_t objectId);
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
30
aqhome/events/eventhandler_p.h
Normal file
30
aqhome/events/eventhandler_p.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/****************************************************************************
|
||||
* This file is part of the project Gwenhywfar.
|
||||
* Gwenhywfar (c) by 2023 Martin Preuss, all rights reserved.
|
||||
*
|
||||
* The license for this file can be found in the file COPYING which you
|
||||
* should have received along with this file.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef AQH_EVENT_HANDLER_P_H
|
||||
#define AQH_EVENT_HANDLER_P_H
|
||||
|
||||
|
||||
#include "aqhome/events/eventhandler.h"
|
||||
|
||||
|
||||
|
||||
struct AQH_EVENT_HANDLER {
|
||||
GWEN_INHERIT_ELEMENT(AQH_EVENT_HANDLER)
|
||||
GWEN_LIST_ELEMENT(AQH_EVENT_HANDLER)
|
||||
|
||||
uint64_t lastTimerId;
|
||||
AQH_EVENT_TIMER_LIST *timerList;
|
||||
AQH_EVENT_SUBSCRIPTION_LIST *subscriptionList;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
93
aqhome/events/eventsubscription.c
Normal file
93
aqhome/events/eventsubscription.c
Normal file
@@ -0,0 +1,93 @@
|
||||
/****************************************************************************
|
||||
* This file is part of the project Gwenhywfar.
|
||||
* Gwenhywfar (c) by 2023 Martin Preuss, all rights reserved.
|
||||
*
|
||||
* The license for this file can be found in the file COPYING which you
|
||||
* should have received along with this file.
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "./eventsubscription_p.h"
|
||||
|
||||
#include <gwenhywfar/debug.h>
|
||||
|
||||
|
||||
|
||||
|
||||
GWEN_INHERIT_FUNCTIONS(AQH_EVENT_SUBSCRIPTION)
|
||||
GWEN_LIST_FUNCTIONS(AQH_EVENT_SUBSCRIPTION, AQH_EventSubscription)
|
||||
|
||||
|
||||
|
||||
|
||||
AQH_EVENT_SUBSCRIPTION *AQH_EventSubscription_new()
|
||||
{
|
||||
AQH_EVENT_SUBSCRIPTION *evs;
|
||||
|
||||
GWEN_NEW_OBJECT(AQH_EVENT_SUBSCRIPTION, evs);
|
||||
GWEN_INHERIT_INIT(AQH_EVENT_SUBSCRIPTION, evs);
|
||||
GWEN_LIST_INIT(AQH_EVENT_SUBSCRIPTION, evs);
|
||||
|
||||
return evs;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventSubscription_free(AQH_EVENT_SUBSCRIPTION *evs)
|
||||
{
|
||||
if (evs) {
|
||||
GWEN_LIST_FINI(AQH_EVENT_SUBSCRIPTION, evs);
|
||||
GWEN_INHERIT_FINI(AQH_EVENT_SUBSCRIPTION, evs);
|
||||
GWEN_FREE_OBJECT(evs);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
int AQH_EventSubscription_GetEventType(const AQH_EVENT_SUBSCRIPTION *evs)
|
||||
{
|
||||
return evs?evs->eventType:0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventSubscription_SetEventType(AQH_EVENT_SUBSCRIPTION *evs, int i)
|
||||
{
|
||||
if (evs)
|
||||
evs->eventType=i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint64_t AQH_EventSubscription_GetObjectId(const AQH_EVENT_SUBSCRIPTION *evs)
|
||||
{
|
||||
return evs?evs->objectId:0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventSubscription_SetObjectId(AQH_EVENT_SUBSCRIPTION *evs, uint64_t i)
|
||||
{
|
||||
if (evs)
|
||||
evs->objectId=i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int AQH_EventSubscription_CallHandler(AQH_EVENT_SUBSCRIPTION *evs, int eventType, uint64_t objectId)
|
||||
{
|
||||
if (evs && evs->handlerFn)
|
||||
return evs->handlerFn(evs, eventType, objectId);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
41
aqhome/events/eventsubscription.h
Normal file
41
aqhome/events/eventsubscription.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/****************************************************************************
|
||||
* This file is part of the project Gwenhywfar.
|
||||
* Gwenhywfar (c) by 2023 Martin Preuss, all rights reserved.
|
||||
*
|
||||
* The license for this file can be found in the file COPYING which you
|
||||
* should have received along with this file.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef AQH_EVENTSUBSCRIPTION_H
|
||||
#define AQH_EVENTSUBSCRIPTION_H
|
||||
|
||||
|
||||
#include "aqhome/api.h"
|
||||
|
||||
#include <gwenhywfar/inherit.h>
|
||||
#include <gwenhywfar/list.h>
|
||||
|
||||
|
||||
|
||||
typedef struct AQH_EVENT_SUBSCRIPTION AQH_EVENT_SUBSCRIPTION;
|
||||
GWEN_INHERIT_FUNCTION_LIB_DEFS(AQH_EVENT_SUBSCRIPTION, AQHOME_API)
|
||||
GWEN_LIST_FUNCTION_LIB_DEFS(AQH_EVENT_SUBSCRIPTION, AQH_EventSubscription, AQHOME_API)
|
||||
|
||||
typedef int (*AQH_EVENT_SUBSCRIPTION_HANDLER_FN)(AQH_EVENT_SUBSCRIPTION *evs, int eventType, uint64_t objectId);
|
||||
|
||||
|
||||
AQHOME_API AQH_EVENT_SUBSCRIPTION *AQH_EventSubscription_new();
|
||||
AQHOME_API void AQH_EventSubscription_free(AQH_EVENT_SUBSCRIPTION *evs);
|
||||
|
||||
AQHOME_API int AQH_EventSubscription_GetEventType(const AQH_EVENT_SUBSCRIPTION *evs);
|
||||
AQHOME_API void AQH_EventSubscription_SetEventType(AQH_EVENT_SUBSCRIPTION *evs, int i);
|
||||
|
||||
AQHOME_API uint64_t AQH_EventSubscription_GetObjectId(const AQH_EVENT_SUBSCRIPTION *evs);
|
||||
AQHOME_API void AQH_EventSubscription_SetObjectId(AQH_EVENT_SUBSCRIPTION *evs, uint64_t i);
|
||||
|
||||
AQHOME_API int AQH_EventSubscription_CallHandler(AQH_EVENT_SUBSCRIPTION *evs, int eventType, uint64_t objectId);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
31
aqhome/events/eventsubscription_p.h
Normal file
31
aqhome/events/eventsubscription_p.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/****************************************************************************
|
||||
* This file is part of the project Gwenhywfar.
|
||||
* Gwenhywfar (c) by 2023 Martin Preuss, all rights reserved.
|
||||
*
|
||||
* The license for this file can be found in the file COPYING which you
|
||||
* should have received along with this file.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef AQH_EVENTSUBSCRIPTION_P_H
|
||||
#define AQH_EVENTSUBSCRIPTION_P_H
|
||||
|
||||
|
||||
#include "aqhome/events/eventsubscription.h"
|
||||
|
||||
|
||||
|
||||
struct AQH_EVENT_SUBSCRIPTION {
|
||||
GWEN_INHERIT_ELEMENT(AQH_EVENT_SUBSCRIPTION)
|
||||
GWEN_LIST_ELEMENT(AQH_EVENT_SUBSCRIPTION)
|
||||
|
||||
int eventType;
|
||||
uint64_t objectId;
|
||||
|
||||
AQH_EVENT_SUBSCRIPTION_HANDLER_FN handlerFn;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
194
aqhome/events/timer.c
Normal file
194
aqhome/events/timer.c
Normal file
@@ -0,0 +1,194 @@
|
||||
/****************************************************************************
|
||||
* This file is part of the project Gwenhywfar.
|
||||
* Gwenhywfar (c) by 2023 Martin Preuss, all rights reserved.
|
||||
*
|
||||
* The license for this file can be found in the file COPYING which you
|
||||
* should have received along with this file.
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "./timer_p.h"
|
||||
|
||||
#include <gwenhywfar/debug.h>
|
||||
|
||||
|
||||
|
||||
GWEN_INHERIT_FUNCTIONS(AQH_EVENT_TIMER)
|
||||
GWEN_LIST_FUNCTIONS(AQH_EVENT_TIMER, AQH_EventTimer)
|
||||
|
||||
|
||||
|
||||
|
||||
AQH_EVENT_TIMER *AQH_EventTimer_new()
|
||||
{
|
||||
AQH_EVENT_TIMER *evt;
|
||||
|
||||
GWEN_NEW_OBJECT(AQH_EVENT_TIMER, evt);
|
||||
GWEN_INHERIT_INIT(AQH_EVENT_TIMER, evt);
|
||||
GWEN_LIST_INIT(AQH_EVENT_TIMER, evt);
|
||||
|
||||
return evt;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventTimer_free(AQH_EVENT_TIMER *evt)
|
||||
{
|
||||
if (evt) {
|
||||
GWEN_LIST_FINI(AQH_EVENT_TIMER, evt);
|
||||
GWEN_INHERIT_FINI(AQH_EVENT_TIMER, evt);
|
||||
|
||||
GWEN_FREE_OBJECT(evt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint32_t AQH_EventTimer_GetFlags(const AQH_EVENT_TIMER *evt)
|
||||
{
|
||||
return evt?evt->flags:0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventTimer_SetFlags(AQH_EVENT_TIMER *evt, uint32_t f)
|
||||
{
|
||||
if (evt)
|
||||
evt->flags=f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventTimer_AddFlags(AQH_EVENT_TIMER *evt, uint32_t f)
|
||||
{
|
||||
if (evt)
|
||||
evt->flags|=f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventTimer_SubFlags(AQH_EVENT_TIMER *evt, uint32_t f)
|
||||
{
|
||||
if (evt)
|
||||
evt->flags&=~f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int AQH_EventTimer_GetTimerType(const AQH_EVENT_TIMER *evt)
|
||||
{
|
||||
return evt?evt->timerType:0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventTimer_SetTimerType(AQH_EVENT_TIMER *evt, int i)
|
||||
{
|
||||
if (evt)
|
||||
evt->timerType=i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint64_t AQH_EventTimer_GetId(const AQH_EVENT_TIMER *evt)
|
||||
{
|
||||
return evt?evt->id:0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventTimer_SetId(AQH_EVENT_TIMER *evt, uint64_t i)
|
||||
{
|
||||
if (evt)
|
||||
evt->id=i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint64_t AQH_EventTimer_GetCurrentValue(const AQH_EVENT_TIMER *evt)
|
||||
{
|
||||
return evt?evt->currentValue:0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventTimer_SetCurrentValue(AQH_EVENT_TIMER *evt, uint64_t i)
|
||||
{
|
||||
if (evt)
|
||||
evt->currentValue=i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint64_t AQH_EventTimer_GetReloadOrAlarmValue(const AQH_EVENT_TIMER *evt)
|
||||
{
|
||||
return evt?evt->reloadOrAlarmValue:0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventTimer_SetReloadOrAlarmValue(AQH_EVENT_TIMER *evt, uint64_t i)
|
||||
{
|
||||
if (evt)
|
||||
evt->reloadOrAlarmValue=i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int AQH_EventTimer_GetEventType(const AQH_EVENT_TIMER *evt)
|
||||
{
|
||||
return evt?evt->eventType:0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_EventTimer_SetEventType(AQH_EVENT_TIMER *evt, int i)
|
||||
{
|
||||
if (evt)
|
||||
evt->eventType=i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int AQH_EventTimer_CheckWhetherTickTriggers(AQH_EVENT_TIMER *evt, uint64_t t)
|
||||
{
|
||||
if (evt && evt->flags & AQH_EVENT_TIMER_FLAGS_RUNNING) {
|
||||
if (evt->timerType==AQH_EventTimerType_CountDown) {
|
||||
if (evt->currentValue>0) {
|
||||
evt->currentValue--;
|
||||
if (evt->currentValue==0) {
|
||||
if (evt->flags & AQH_EVENT_TIMER_FLAGS_RESTART) {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Timer %lu expired, restarting", (unsigned long int) (evt->id));
|
||||
evt->currentValue=evt->reloadOrAlarmValue;
|
||||
}
|
||||
else {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Timer %lu expired", (unsigned long int) (evt->id));
|
||||
evt->flags&=~AQH_EVENT_TIMER_FLAGS_RUNNING;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (evt->timerType==AQH_EventTimerType_Alarm) {
|
||||
if (t>=evt->reloadOrAlarmValue) {
|
||||
evt->flags&=~AQH_EVENT_TIMER_FLAGS_RUNNING;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Unknown timer type %d", evt->timerType);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
65
aqhome/events/timer.h
Normal file
65
aqhome/events/timer.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/****************************************************************************
|
||||
* This file is part of the project Gwenhywfar.
|
||||
* Gwenhywfar (c) by 2023 Martin Preuss, all rights reserved.
|
||||
*
|
||||
* The license for this file can be found in the file COPYING which you
|
||||
* should have received along with this file.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef AQH_EVENT_TIMER_H
|
||||
#define AQH_EVENT_TIMER_H
|
||||
|
||||
|
||||
#include "aqhome/api.h"
|
||||
|
||||
#include <gwenhywfar/inherit.h>
|
||||
#include <gwenhywfar/list.h>
|
||||
|
||||
|
||||
enum {
|
||||
AQH_EventTimerType_CountDown=0,
|
||||
AQH_EventTimerType_Alarm
|
||||
} AQH_EVENT_TIMER_TYPE;
|
||||
|
||||
|
||||
#define AQH_EVENT_TIMER_FLAGS_RUNNING 0x0001
|
||||
#define AQH_EVENT_TIMER_FLAGS_RESTART 0x0002
|
||||
#define AQH_EVENT_TIMER_FLAGS_DELETE_IF_TRIGGERED 0x0004
|
||||
|
||||
|
||||
|
||||
typedef struct AQH_EVENT_TIMER AQH_EVENT_TIMER;
|
||||
GWEN_INHERIT_FUNCTION_LIB_DEFS(AQH_EVENT_TIMER, AQHOME_API)
|
||||
GWEN_LIST_FUNCTION_LIB_DEFS(AQH_EVENT_TIMER, AQH_EventTimer, AQHOME_API)
|
||||
|
||||
|
||||
AQHOME_API AQH_EVENT_TIMER *AQH_EventTimer_new();
|
||||
AQHOME_API void AQH_EventTimer_free(AQH_EVENT_TIMER *evt);
|
||||
|
||||
AQHOME_API uint32_t AQH_EventTimer_GetFlags(const AQH_EVENT_TIMER *evt);
|
||||
AQHOME_API void AQH_EventTimer_SetFlags(AQH_EVENT_TIMER *evt, uint32_t f);
|
||||
AQHOME_API void AQH_EventTimer_AddFlags(AQH_EVENT_TIMER *evt, uint32_t f);
|
||||
AQHOME_API void AQH_EventTimer_SubFlags(AQH_EVENT_TIMER *evt, uint32_t f);
|
||||
|
||||
AQHOME_API int AQH_EventTimer_GetTimerType(const AQH_EVENT_TIMER *evt);
|
||||
AQHOME_API void AQH_EventTimer_SetTimerType(AQH_EVENT_TIMER *evt, int i);
|
||||
|
||||
AQHOME_API uint64_t AQH_EventTimer_GetId(const AQH_EVENT_TIMER *evt);
|
||||
AQHOME_API void AQH_EventTimer_SetId(AQH_EVENT_TIMER *evt, uint64_t i);
|
||||
|
||||
AQHOME_API uint64_t AQH_EventTimer_GetCurrentValue(const AQH_EVENT_TIMER *evt);
|
||||
AQHOME_API void AQH_EventTimer_SetCurrentValue(AQH_EVENT_TIMER *evt, uint64_t i);
|
||||
|
||||
AQHOME_API uint64_t AQH_EventTimer_GetReloadOrAlarmValue(const AQH_EVENT_TIMER *evt);
|
||||
AQHOME_API void AQH_EventTimer_SetReloadOrAlarmValue(AQH_EVENT_TIMER *evt, uint64_t i);
|
||||
|
||||
AQHOME_API int AQH_EventTimer_GetEventType(const AQH_EVENT_TIMER *evt);
|
||||
AQHOME_API void AQH_EventTimer_SetEventType(AQH_EVENT_TIMER *evt, int i);
|
||||
|
||||
|
||||
AQHOME_API int AQH_EventTimer_CheckWhetherTickTriggers(AQH_EVENT_TIMER *evt, uint64_t t);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
34
aqhome/events/timer_p.h
Normal file
34
aqhome/events/timer_p.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/****************************************************************************
|
||||
* This file is part of the project Gwenhywfar.
|
||||
* Gwenhywfar (c) by 2023 Martin Preuss, all rights reserved.
|
||||
*
|
||||
* The license for this file can be found in the file COPYING which you
|
||||
* should have received along with this file.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef AQH_EVENT_TIMER_P_H
|
||||
#define AQH_EVENT_TIMER_P_H
|
||||
|
||||
|
||||
#include "aqhome/events/timer.h"
|
||||
|
||||
|
||||
|
||||
struct AQH_EVENT_TIMER {
|
||||
GWEN_INHERIT_ELEMENT(AQH_EVENT_TIMER)
|
||||
GWEN_LIST_ELEMENT(AQH_EVENT_TIMER)
|
||||
|
||||
uint32_t flags;
|
||||
int timerType;
|
||||
uint64_t id;
|
||||
uint64_t currentValue;
|
||||
uint64_t reloadOrAlarmValue;
|
||||
|
||||
int eventType;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user