/* @file Philosopher_modMain_Im_container.h
 * Container Interface header for Module Philosopher_modMain_Im
 * Generated automatically from specification; do not modify here
 */

#if !defined(PHILOSOPHER_MODMAIN_IM_CONTAINER_H)
#define PHILOSOPHER_MODMAIN_IM_CONTAINER_H


/* Include the types from the XML types files */
#include "ECOA.h"

#include "ECOA.h"

#include "Philosopher_modMain_Im_user_context.h"

/* Container Types */
#include "Philosopher_modMain_Im_container_types.h"


#if defined(__cplusplus)
extern "C" {
#endif /* __cplusplus */

/* Incomplete definition of the technical (platform-dependent) part of the context
 * (it will be defined privately by the container) */
struct Philosopher_modMain_Im__platform_hook;

/* Module Context structure declaration */
typedef struct 
{
   /*
    * Other container technical data will accessible through the pointer
    * defined here
    */
   struct Philosopher_modMain_Im__platform_hook *platform_hook;

   /* the type Philosopher_modMain_Im_user_context shall be defined by the user
    * in the Philosopher_modMain_Im_user_context.h file to carry the module
    * implementation private data
    */
   Philosopher_modMain_Im_user_context user;

} Philosopher_modMain_Im__context;


/* Logging and fault management services API */
void Philosopher_modMain_Im_container__log_trace
   (Philosopher_modMain_Im__context* context, const ECOA__log log);

void Philosopher_modMain_Im_container__log_debug
   (Philosopher_modMain_Im__context* context, const ECOA__log log);

void Philosopher_modMain_Im_container__log_info
   (Philosopher_modMain_Im__context* context, const ECOA__log log);

void Philosopher_modMain_Im_container__log_warning
   (Philosopher_modMain_Im__context* context, const ECOA__log log);

void Philosopher_modMain_Im_container__raise_error
   (Philosopher_modMain_Im__context* context, const ECOA__log log);

void Philosopher_modMain_Im_container__raise_fatal_error
   (Philosopher_modMain_Im__context* context, const ECOA__log log);

/* Time services API */
void Philosopher_modMain_Im_container__get_relative_local_time
   (Philosopher_modMain_Im__context* context, ECOA__hr_time* relative_local_time);

ECOA__return_status Philosopher_modMain_Im_container__get_UTC_time
   (Philosopher_modMain_Im__context* context, ECOA__global_time* utc_time);

ECOA__return_status Philosopher_modMain_Im_container__get_absolute_system_time
   (Philosopher_modMain_Im__context* context, ECOA__global_time* absolute_system_time);

/* Time resolution services API */
void Philosopher_modMain_Im_container__get_relative_local_time_resolution
   (Philosopher_modMain_Im__context* context, ECOA__duration* relative_local_time_resolution);

void Philosopher_modMain_Im_container__get_UTC_time_resolution
   (Philosopher_modMain_Im__context* context, ECOA__duration* utc_time_resolution);

void Philosopher_modMain_Im_container__get_absolute_system_time_resolution
   (Philosopher_modMain_Im__context* context, ECOA__duration* absolute_system_time_resolution);

void Philosopher_modMain_Im_container__get_Id_value
   (Philosopher_modMain_Im__context* context,
    ECOA__uint32* value);

ECOA__return_status Philosopher_modMain_Im_container__ready__get_read_access
   (Philosopher_modMain_Im__context* context,
    Philosopher_modMain_Im_container__ready_handle* data_handle);


ECOA__return_status Philosopher_modMain_Im_container__ready__release_read_access
   (Philosopher_modMain_Im__context* context,
    Philosopher_modMain_Im_container__ready_handle* data_handle);

ECOA__return_status Philosopher_modMain_Im_container__take__request_sync
   (Philosopher_modMain_Im__context* context,
    const ECOA__int32 which,
    const ECOA__int32 who,
    ECOA__boolean8* taken);

ECOA__return_status Philosopher_modMain_Im_container__surrender__request_sync
   (Philosopher_modMain_Im__context* context,
    const ECOA__int32 which,
    const ECOA__int32 who);


#if defined(__cplusplus)
}
#endif /* __cplusplus */

#endif  /* PHILOSOPHER_MODMAIN_IM_CONTAINER_H */

