mqttClient/src/module.c
2023-03-05 17:32:32 +01:00

67 lines
1.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "module.h"
Module_t *Modules = NULL;
unsigned int Modules_len = 0;
unsigned int Modules_alloc = 0;
void Modules_Add(Module_t module)
{
printf("INFO: Modules_Add(): add module '%s' to the list\n", module.Name);
if (Modules == NULL)
{
Modules = (Module_t*) malloc(sizeof(Module_t) * 5);
Modules_alloc = 5;
}
if (Modules_len >= Modules_alloc)
{
Module_t *new_subs = (Module_t *) malloc(sizeof(Module_t) * (Modules_alloc + 5));
memcpy(new_subs, Modules, sizeof(Module_t) * Modules_alloc);
Module_t *old_subs = Modules;
Modules = new_subs;
free(old_subs);
}
memcpy(Modules + sizeof(Module_t)*Modules_len, &module, sizeof(Module_t));
Modules_len++;
}
void Modules_Init()
{
// extern Module_t Module_Clock();
// Modules_Add(Module_Clock());
extern Module_t Module_Button();
Modules_Add(Module_Button());
}
void Modules_StartOne(Module_t module)
{
printf("INFO: Modules_StartOne(): starting module '%s'\n", module.Name);
(*(module.Start))();
}
void Modules_StopOne(Module_t module)
{
(*(module.Stop))();
}
void Modules_StartAll()
{
for (int i=0; i<Modules_len; i++)
{
Modules_StartOne(*(Modules + sizeof(Module_t)*i));
}
}
void Modules_StopAll()
{
for (int i=0; i<Modules_len; i++)
{
Modules_StopOne(*(Modules + sizeof(Module_t)*i));
}
}