Generation working and Compilation of MARTe components

This commit is contained in:
ferrog
2025-05-13 16:03:11 +00:00
parent 3a5e378d99
commit 4faee3802a
1571 changed files with 611466 additions and 0 deletions

View File

@@ -0,0 +1,165 @@
#ifndef CA_IF_H
#define CA_IF_H
/******************************************************************************
* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $
* $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $
*
* Project : CODAC Core System
*
* Description : Channel Access Interface
*
* Author : Bertrand Bauvir
*
* Copyright (c) : 2010-2014 ITER Organization,
* CS 90 046
* 13067 St. Paul-lez-Durance Cedex
* France
*
* This file is part of ITER CODAC software.
* For the terms and conditions of redistribution or use of this software
* refer to the file ITER-LICENSE.TXT located in the top level directory
* of the distribution package.
******************************************************************************/
/* Global header files */
#include <iostream>
#include <cadef.h> /* Channel Access API definition, etc. */
//#include <log.h> /* CCS logging library */
/* Local header files */
/* Constants */
#ifndef log_trace
#define log_trace(arg_msg...) {}
#endif
#ifndef log_error
#define log_error(arg_msg...){}
#endif
/* Type definition */
/* Global variables */
/* Public function declaration */
static inline bool CAInterface_Initialize(void) {
bool status = false;
ca_context_create (ca_disable_preemptive_callback); //Default
//ca_context_create(ca_enable_preemptive_callback);
status = true;
return status;
};
static inline bool CAInterface_Finalize(void) {
bool status = false;
ca_context_destroy();
status = true;
return status;
};
static inline bool CAInterface_ConnectVariable(char* name, chid& id) {
bool status = false;
/* Connect to channels */
if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) {
return status;
}
/* Wait for connections */
if (ca_pend_io(1) != ECA_NORMAL) {
log_error("%s - ca_pend_io failed", __FUNCTION__);
return status;
}
/* Verify channel */
if (ca_state(id) != cs_conn) {
//log_warning("Connection to channel '%s' has not been successful", name);
} else {
//log_info("Connection to channel '%s' has been successfully verified", name);
}
status = true;
return status;
};
static inline bool CAInterface_ReadVariable(chid channel, chtype type,
void* p_value) {
bool status = false;
if (ca_state(channel) != cs_conn) {
//log_error("%s - Connection to channel has been lost");
return status;
}
if (ca_get(type, channel, p_value) != ECA_NORMAL) {
//log_error("%s - ca_get failed", __FUNCTION__);
return status;
}
/* Flush the requests */
if (ca_pend_io(1) != ECA_NORMAL) {
//log_error("%s - ca_pend_io failed", __FUNCTION__);
return status;
}
status = true;
return status;
};
static inline bool CAInterface_WriteVariable(chid channel, chtype type,
void* p_value) {
bool status = false;
if (ca_state(channel) != cs_conn) {
//log_error("%s - Connection to channel has been lost", __FUNCTION__);
return status;
}
if (ca_put(type, channel, p_value) != ECA_NORMAL) {
//log_warning("%s - ca_put failed", __FUNCTION__);
}
/* Flush the requests */
if (ca_pend_io(1) != ECA_NORMAL) {
//log_error("%s - ca_pend_io failed", __FUNCTION__);
return status;
}
status = true;
return status;
};
typedef void (*pCallBack)(struct event_handler_args);
static inline bool CAInterface_SubscribeVariable(chid channel, chtype type,
pCallBack cb_func, void* p_value) {
bool status = false;
if (ca_state(channel) != cs_conn) {
//log_error("%s - Connection to channel has been lost", __FUNCTION__);
return status;
}
if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL)
!= ECA_NORMAL) {
//log_error("%s - ca_create_subscription failed", __FUNCTION__);
return status;
}
/*
if(ca_pend_event(0.0) != ECA_NORMAL){
//log_error("%s - ca_pend_event failed", __FUNCTION__);
return status;
}
*/
status = true;
return status;
};
#endif /* CA_IF_H */