src.dualinventive.com/jjacobs/dinetrpcll-sniffer/libdi/include/di/can/net.h

125 lines
2.5 KiB
C

/**
* @file include/di/can/net.h
* @brief DI-Net CAN network maintenance
* @date Jul 12, 2016
* @author jjacobs
* @copyright 2016 Dual Inventive Technology Centre B.V.
*
* raw
*/
#ifndef LIBDI_INCLUDE_DI_CAN_NET_H_
#define LIBDI_INCLUDE_DI_CAN_NET_H_
#include <di/types.h>
#include <di/can/net/cfg.h>
#include <di/can/net/dtypes.h>
#include <di/can/net/canid.h>
#include <di/can/net/structures.h>
#include <di/can/net/callbacks.h>
#include <di/can/net/discover.h>
#include <di/can/net/node.h>
#include <di/can/net/self.h>
#include <di/can/defines.h>
#include <di/device.h>
struct di_can_ctx;
#ifdef __cplusplus
extern "C" {
#endif
/**
* Initialize the NET subsystem
* @note May only be called once
*/
void di_can_net_init(struct di_can_ctx *ctx);
/**
* Periodic execution of the network subsystem (maintenance, follower-leader FSMs)
*/
void di_can_net_execute(struct di_can_ctx *ctx);
/**
* @name Locking (NET subsystem only)
* @{
*/
/** Lock the NET subsystem context */
void di_can_net_lock(struct di_can_net *ctx);
/** Unlock the NET subsystem context */
void di_can_net_unlock(struct di_can_net *ctx);
/**
* @}
*/
/**
* @name Reply messaging
* @{
*/
/**
* Send the device:uid as reply or publish CAN message
* @param ctx CAN context
* @param uid The device:uid string
* @param req Request to create the reply for (MAY NOT be NULL, else DNE_PARAM is returned)
* @retval DNOK When device:uid is send, !DNOK otherwise.
*/
di_errno_t di_can_net_send_node_uid(struct di_can_ctx *ctx,
const char uid[DI_DEVICE_UID_LEN], const struct di_can_msg *req);
/**
* @}
*/
/**
* @name Publish messaging
* {
*/
di_errno_t di_can_net_publish_node_error(struct di_can_ctx *ctx, const di_errno_t err);
/**
* @}
*/
/**
* @name Serialize values into pre-allocated msg structures
* @{
*/
/**
* Serialize node type and role struct
*/
void di_can_net_serialize_node_struct_type_role(struct di_can_msg *msg, const struct di_can_net_node *node);
/**
* Serialize node error
*/
void di_can_net_serialize_node_error(struct di_can_msg *msg, const di_errno_t err);
/** @} */
/**
* @name Deserialize values from received can messages
* @{
*/
/**
* Deserialize node type and role struct
*/
di_errno_t di_can_net_deserialize_node_struct_type_role(struct di_can_net_node *node, const struct di_can_msg *msg);
/**
* Deserialize node error
*/
di_errno_t di_can_net_deserialize_node_error(di_errno_t *err, const struct di_can_msg *msg);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* LIBDI_INCLUDE_DI_CAN_NET_H_ */