LibJuno 0.22.0
LibJuno is a lightweight C99 library designed specifically for embedded systems.
Loading...
Searching...
No Matches
module.h File Reference
#include "juno/status.h"
#include <stdint.h>
Include dependency graph for module.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

The name of the module type

Declare a juno module implemented as a union

#define JUNO_MODULE_DECLARE(name)   typedef union name##_TAG name
 
#define JUNO_MODULE_BASE_DECLARE(name)   typedef struct name##_TAG name
 
#define JUNO_MODULE_DERIVE_DECLARE(name)   JUNO_MODULE_BASE_DECLARE(name)
 
#define JUNO_FAILURE_HANDLER   _pfcnFailureHandler
 
#define JUNO_FAILURE_USER_DATA   _pvFailurUserData
 
#define JUNO_MODULE_EMPTY
 
#define JUNO_MODULE_SUPER   tBase
 
#define JUNO_MODULE(name, API, base, derived)
 
#define JUNO_MODULE_BASE(name, API, members)
 
#define JUNO_MODULE_DERIVE(name, base, members)
 
#define JUNO_MODULE_GET_API(ptModule, MODULE_BASE_NAME)   ((const MODULE_BASE_NAME *)ptModule)->ptApi
 

Macro Definition Documentation

◆ JUNO_FAILURE_HANDLER

#define JUNO_FAILURE_HANDLER   _pfcnFailureHandler

Alias for the failure handler for a module

◆ JUNO_FAILURE_USER_DATA

#define JUNO_FAILURE_USER_DATA   _pvFailurUserData

Alias for the failure handler user data for a module

◆ JUNO_MODULE

#define JUNO_MODULE (   name,
  API,
  base,
  derived 
)
Value:
union name##_TAG \
{ \
const API *ptApi; \
derived \
}
#define JUNO_MODULE_SUPER
Definition module.h:54

Define a juno module. This needs to be done in the composition root. This is where users define all possible module implementations for a module.

Parameters
nameThe name of the module as declared
APIThe name of the API type for the module
baseThe name of the base implementation type for the module as declared
derivedThe derived modules seperated by ;

◆ JUNO_MODULE_BASE

#define JUNO_MODULE_BASE (   name,
  API,
  members 
)
Value:
struct name##_TAG \
{ \
const API *ptApi; \
members \
JUNO_FAILURE_HANDLER_T JUNO_FAILURE_HANDLER; \
}
#define JUNO_FAILURE_USER_DATA
Definition module.h:45
#define JUNO_FAILURE_HANDLER
Definition module.h:41
void JUNO_USER_DATA_T
Definition status.h:43

Implement a base for a module

Parameters
nameThe name of the module base implementation as declared
APIThe API type for the module
membersThe member components of the module base implementation

◆ JUNO_MODULE_BASE_DECLARE

#define JUNO_MODULE_BASE_DECLARE (   name)    typedef struct name##_TAG name

Declare a base implementation for the module implemented as a struct

Parameters
nameThe name of the base implementation type

◆ JUNO_MODULE_DECLARE

#define JUNO_MODULE_DECLARE (   name)    typedef union name##_TAG name

◆ JUNO_MODULE_DERIVE

#define JUNO_MODULE_DERIVE (   name,
  base,
  members 
)
Value:
struct name##_TAG \
{ \
members \
}

Implement a derivation of a module

Parameters
nameThe name of the module derivation as declared
baseThe name of the base implementation for the module as declared
membersThe member components of the module derivation

◆ JUNO_MODULE_DERIVE_DECLARE

#define JUNO_MODULE_DERIVE_DECLARE (   name)    JUNO_MODULE_BASE_DECLARE(name)

Declare a derivation of a juno module implemented as a struct

Parameters
nameThe name of the derived module type

◆ JUNO_MODULE_EMPTY

#define JUNO_MODULE_EMPTY

Empty macro that indicates a module implementation has no additional members

◆ JUNO_MODULE_GET_API

#define JUNO_MODULE_GET_API (   ptModule,
  MODULE_BASE_NAME 
)    ((const MODULE_BASE_NAME *)ptModule)->ptApi

Get the API pointer from the module

Parameters
ptModuleThe module pointer
MODULE_BASE_NAMEThe base type of the module

◆ JUNO_MODULE_SUPER

#define JUNO_MODULE_SUPER   tBase

Alias for the module base implementation