NorthStar-Endurance-TestBench/north-star_emotas-stack/colib_sl/inc/co_lss.h

158 lines
6.2 KiB
C

/*
* co_lss.h - contains defines for LSS services
*
* Copyright (c) 2012-2023 emotas embedded communication GmbH
*
*-------------------------------------------------------------------
* $Id: co_lss.h 49613 2023-09-26 14:20:14Z boe $
*
*-------------------------------------------------------------------
*
*
*
*/
/**
* \brief defines for lss services
*
* \file co_lss.h - contains defines for lss services
*/
#ifndef CO_LSS_H
#define CO_LSS_H 1
#include <co_datatype.h>
#include "co_drv.h"
/* datatypes */
/**
* \brief LSS slave states
*/
typedef enum {
CO_LSS_STATE_WAITING = 0u, /**< LSS state waiting */
CO_LSS_STATE_CONFIGURATION = 1u, /**< LSS state configuration */
CO_LSS_STATE_SILENT_PASSIVE = 2u, /**< LSS state silent in 447, paasive in LSS FD */
CO_LSS_STATE_REACTIVATE = 3u /**< LSS FD command to leave passive state */
} CO_LSS_STATE_T;
/* for compatibility with older versiona */
#define CO_LSS_STATE_SILENT CO_LSS_STATE_SILENT_PASSIVE
/**
* \brief LSS slave services for indication functions
*/
typedef enum {
CO_LSS_SERVICE_STORE, /**< LSS service indication store node id */
CO_LSS_SERVICE_NEW_BITRATE, /**< LSS service indication new bitrate */
CO_LSS_SERVICE_BITRATE_OFF, /**< LSS service indication bitrate off */
CO_LSS_SERVICE_BITRATE_SET, /**< LSS service indication set new bitrate*/
CO_LSS_SERVICE_BITRATE_ACTIVE, /**< LSS service indication bitrate active */
CO_LSS_SERVICE_NEW_NODE_ID /**< LSS service indication new node-id */
} CO_LSS_SERVICE_T;
/**
* \brief LSS master services for indication functions
*/
typedef enum {
CO_LSS_MASTER_SERVICE_NON_CONFIG_SLAVE, /**< LSS Master service non-config slave */
CO_LSS_MASTER_SERVICE_SET_NODEID, /**< LSS Master service set node id*/
CO_LSS_MASTER_SERVICE_SET_BITRATE, /**< LSS Master service set bitrate*/
CO_LSS_MASTER_SERVICE_FASTSCAN, /**< LSS Master service fastscan */
CO_LSS_MASTER_SERVICE_STORE, /**< LSS Master service store */
CO_LSS_MASTER_SERVICE_INQUIRE_NODEID, /**< LSS Master service inquire node*/
CO_LSS_MASTER_SERVICE_INQUIRE_VENDOR, /**< LSS Master service inquire vendor */
CO_LSS_MASTER_SERVICE_INQUIRE_PRODUCT, /**< LSS Master service inquire product */
CO_LSS_MASTER_SERVICE_INQUIRE_REVISION, /**< LSS Master service inquire revision */
CO_LSS_MASTER_SERVICE_INQUIRE_SERIAL, /**< LSS Master service inquire serial */
CO_LSS_MASTER_SERVICE_INQUIRE_ADDRESS, /**< LSS Master service inquire address, CANopen FD */
CO_LSS_MASTER_SERVICE_BITRATE_OFF, /**< LSS Master service indication bitrate off */
CO_LSS_MASTER_SERVICE_BITRATE_SET, /**< LSS Master service indication set new bitrate*/
CO_LSS_MASTER_SERVICE_BITRATE_ACTIVE, /**< LSS Master service indication bitrate active */
CO_LSS_MASTER_SERVICE_SWITCH_SELECTIVE, /**< LSS Master service switch mode selective */
CO_LSS_MASTER_SERVICE_IDENTITY, /**< LSS Master service indentity */
CO_LSS_MASTER_SERVICE_SWITCH_GLOBAL /**< LSS Master service switch mode global */
} CO_LSS_MASTER_SERVICE_T;
/**
* \brief function pointer to LSS indication
* \param service - answer for service LSS_SERVICE_xxx
* \param para - new bitrate / pending node id (only for CO_LSS_SERVICE_STORE)
* 1000, 500, ... 10 standard bitrates
* 0 autobaud
* 0 table specific, values in pErrCode and pErrSpec)
* \param pErrCode - pointer to error code
* \param pErrSpec - pointer to error spec
*
* \retval 0 - success
* \retval 1 - store not supported
* \retval 2 - media access error
* \retval 255 - implementation specific (value in parameter pErr)
*/
typedef void (* CO_EVENT_LSS_T)(CO_LSS_SERVICE_T service,
UNSIGNED16 para, UNSIGNED8 *pErrCode, UNSIGNED8 *pErrSpec); /*lint !e960 customer specific parameter names */
typedef enum {
CO_EVENT_LSS_MASTER_RESULT_OK, /* service ok */
CO_EVENT_LSS_MASTER_RESULT_TIMEOUT, /* service timed out */
CO_EVENT_LSS_MASTER_RESULT_ERROR /* service returns with error */
} CO_EVENT_LSS_MASTER_RESULT_T;
/**
* \brief function pointer to LSS master indication
* \param service - answer for service LSS_MASTER_SERVICE_xxx
* \param errorCode == 65535 - timeout
* \param errorCode == 1..255 - error code
* \param errorCode == 0 - ok
* \param errorSpec - error spec (if errorCode == 65365)
* \param pIdentity == NULL - no data available
* \param pIdentity =! NULL - pIdentity valid
*
*/
typedef void (* CO_EVENT_LSS_MASTER_T)(CO_LSS_MASTER_SERVICE_T,
UNSIGNED16 errorCode, UNSIGNED8 errorSpec, UNSIGNED32 *pIdentity); /*lint !e960 customer specific parameter names */
EXTERN_DECL RET_T coLssInit(void);
EXTERN_DECL RET_T coLssMasterInit(void);
EXTERN_DECL RET_T coEventRegister_LSS(CO_EVENT_LSS_T pFunction);
EXTERN_DECL RET_T coEventRegister_LSS_MASTER(CO_EVENT_LSS_MASTER_T pFunction);
EXTERN_DECL RET_T coLssIdentifyNonConfiguredSlaves(
UNSIGNED16 timeOutVal, UNSIGNED16 interval);
EXTERN_DECL void coLssNonConfigSlave(const CO_CAN_REC_MSG_T *pMsg);
EXTERN_DECL RET_T coLssFastScan(UNSIGNED16 timeOutVal);
EXTERN_DECL RET_T coLssFastScanKnownDevice(UNSIGNED32 vendorId,
UNSIGNED32 productCode,
UNSIGNED32 versionNr, UNSIGNED32 serNr, UNSIGNED16 timeOutVal);
EXTERN_DECL RET_T coLssSetNodeId(UNSIGNED8 nodeId,
UNSIGNED16 timeOutVal);
EXTERN_DECL RET_T coLssSetBitrate(UNSIGNED16 bitRate,
UNSIGNED16 timeOutVal);
EXTERN_DECL RET_T coLssSetBitrateTable(UNSIGNED8 tableSelector,
UNSIGNED8 tableIndex, UNSIGNED16 timeOutVal);
EXTERN_DECL RET_T coLssActivateBitrate(UNSIGNED16 switchDelay);
EXTERN_DECL RET_T coLssSwitchGlobal(CO_LSS_STATE_T mode);
EXTERN_DECL RET_T coLssSwitchSelective(UNSIGNED32 vendorId,
UNSIGNED32 productCode,
UNSIGNED32 versionNr, UNSIGNED32 serNr, UNSIGNED16 timeOutVal);
EXTERN_DECL RET_T coLssStoreConfig(UNSIGNED16 timeOutVal);
EXTERN_DECL RET_T coLssInquireNodeId(UNSIGNED16 timeOutVal);
EXTERN_DECL RET_T coLssInquireIdentity(UNSIGNED8 subIndex,
UNSIGNED16 timeOutVal);
EXTERN_DECL RET_T coLssIdentifyRemoteSlaves(UNSIGNED32 vendor,
UNSIGNED32 productCode,
UNSIGNED32 revisionLow, UNSIGNED32 revisionHigh,
UNSIGNED32 serialNumberLow, UNSIGNED32 serialNumberHigh,
UNSIGNED16 timeOutVal);
EXTERN_DECL void coLssMasterDisable(void);
EXTERN_DECL void coLssMasterEnable(void);
EXTERN_DECL UNSIGNED32 coLssMasterGetInquireData(void);
EXTERN_DECL RET_T coLssFdInquireAddress(UNSIGNED16 timeOutVal);
#endif /* CO_LSS_H */