jfmartel 087245571a Ajout du support pour les fichiers CAN database .dbc
Ajout shortcut pour RDP vers le PC dans le champs
2023-01-09 16:45:23 -05:00

2584 lines
81 KiB
C

/*
* Copyright 2002-2017 by KVASER AB, SWEDEN
*
* WWW: http://www.kvaser.com
*
* This software is furnished under a license and may be used and copied
* only in accordance with the terms of such license.
*
*/
#ifndef KVADBLIB_H
#define KVADBLIB_H
/**
* \file kvaDbLib.h
* \brief Definitions for the Database API.
* \details
* \defgroup grp_kvadb kvaDbLib
* \brief Library for creating, reading, writing and modifying databases.
*
* \note Please note that allowed characters in identiers are digits, letters and "_" (underscore). <br>
* Identifiers shall also start with a letter or underscore.
* \defgroup kvadb_database Databases
* \brief Initialization, setting protocols and flags.
* \ingroup grp_kvadb
* \defgroup kvadb_messages Messages
* \brief Add, delete and modify messages.
* \ingroup grp_kvadb
* \defgroup kvadb_signals Signals
* \brief Add, delete and modify signals in messages.
* \ingroup grp_kvadb
* \defgroup kvadb_nodes Nodes
* \brief Add, delete and modify nodes.
* \ingroup grp_kvadb
* \defgroup kvadb_attributes Attributes
* \brief Add, delete and modify attributes for messages, signals and nodes.
* \ingroup grp_kvadb
*/
#include <Windows.h>
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include <stdlib.h>
/**
*
* \name kvaDbErr_xxx
* \anchor kvaDbErr_xxx
*
* The following codes are returned by most kvaDbLib API calls.
*
* \note Error codes are always negative.
* @{
*/
typedef enum {
kvaDbOK = 0, ///< OK - no error
kvaDbErr_Fail = -1, ///< General failure
kvaDbErr_NoDatabase = -2, ///< No database was found
kvaDbErr_Param = -3, ///< One or more of the parameters in call is erronous
kvaDbErr_NoMsg = -4, ///< No message was found
kvaDbErr_NoSignal = -5, ///< No signal was found
kvaDbErr_Internal = -6, ///< An internal error occured in the library
kvaDbErr_DbFileOpen = -7, ///< Could not open the database file
kvaDbErr_DatabaseInternal = -8, ///< An internal error occured in the database handler
kvaDbErr_NoNode = -9, ///< Could not find the database node
kvaDbErr_NoAttrib = -10, ///< No attribute found
kvaDbErr_OnlyOneAllowed = -11, ///< An identical kvaDbLib structure already exists (and only one database at a time can be used).
kvaDbErr_WrongOwner = -12, ///< Wrong owner for attribute
kvaDbErr_InUse = -13, ///< An item is in use
kvaDbErr_BufferSize = -14, ///< The supplied buffer is too small to hold the result
kvaDbErr_DbFileParse = -15, ///< Could not parse the database file
} KvaDbStatus;
/** @} */
/**
* \name Kvaser Database Message Flags
* \anchor KVADB_MESSAGE_xxx
*
* @{
*/
#define KVADB_MESSAGE_STD 0x00000000 ///< Message is a standard CAN message
#define KVADB_MESSAGE_EXT 0x80000000 ///< Message is an extended CAN message
#define KVADB_MESSAGE_J1939 0x00000001 ///< Message uses J1939 protocol.
#define KVADB_MESSAGE_WAKEUP 0x00000002 ///< Message is a wakeup frame. This flag is currently not used.
/** @} */
/**
* \name Kvaser CAN Message Flags
*
* @{
*/
#define canMSG_STD 0x0002 ///< Message has a standard (11-bit) identifier
#define canMSG_EXT 0x0004 ///< Message has an extended (29-bit) identifier
#define canFDMSG_FDF 0x010000 ///< Message is an FD message (CAN FD)
#define canFDMSG_BRS 0x020000 ///< Message is sent/received with bit rate switch (CAN FD)
/** @} */
/**
* \name CANDBSignalEncoding API Signal Encoding
*
* The following values are used by \ref kvaDbGetSignalEncoding() and
* \ref kvaDbSetSignalEncoding()
* @{
*/
typedef enum {
kvaDb_Intel = 0, ///< Intel
kvaDb_Motorola = 1, ///< kvaDb_Motorola
} KvaDbSignalEncoding;
/** @} */
/**
* \name CANDBSignalRepresentation API Signal Representation
*
* The type \ref KvaDbSignalType is used by e.g. \ref kvaDbGetSignalRepresentationType().
* @{
*/
typedef enum {
kvaDb_Invalid, ///< Invalid representation
kvaDb_Signed, ///< Signed integer
kvaDb_Unsigned, ///< Unsigned integer
kvaDb_Float, ///< Float, strictly 32 bit long
kvaDb_Double ///< Double, strictly 64 bit long
} KvaDbSignalType;
/** @} */
/**
* \name CANDBAttributeRepresentation API Attribute Representation
*
* The type \ref KvaDbAttributeType is used by e.g. kvaDbGetAttributeDefinitionType()
* and kvaDbGetAttributeType().
* @{
*/
typedef enum {
kvaDb_AttributeInvalid = 0, ///< Invalid attribute
kvaDb_AttributeInteger = 1, ///< Integer attribute
kvaDb_AttributeFloat = 3, ///< Float attribute
kvaDb_AttributeEnumeration = 4, ///< Enumeration attribute
kvaDb_AttributeString = 5, ///< String attribute
} KvaDbAttributeType;
/** @} */
/**
* \name CANDBAttributeOwner API Attribute Owner
* \anchor kvadb_AttributeOwnerXXX
*
* The type \ref KvaDbAttributeOwner is used by e.g. \ref kvaDbGetAttributeDefinitionOwner(),
* @{
*/
typedef enum {
kvaDb_AttributeOwnerInvalid = 0, ///< Invalid owner
kvaDb_AttributeOwnerDb = 1, ///< Database owner
kvaDb_AttributeOwnerMessage = 2, ///< Message owner
kvaDb_AttributeOwnerNode = 3, ///< Node owner
kvaDb_AttributeOwnerSignal = 4, ///< Signal owner
kvaDb_AttributeOwnerEnv = 5, ///< Environment owner
} KvaDbAttributeOwner;
/** @} */
/**
* \name CANDBProtocolType API Protocol Type
* \anchor KvaDbProtocolType
*
* The type \ref KvaDbProtocolType is used by e.g. \ref kvaDbGetProtocol() and \ref kvaDbSetProtocol()
* @{
*/
typedef enum {
kvaDb_ProtocolCan = 0, ///< Can protocol
kvaDb_ProtocolVan = 1, ///< Van protocol
kvaDb_ProtocolLin = 2, ///< Lin protocol
kvaDb_ProtocolMOST = 3, ///< MOST protocol
kvaDb_ProtocolFlexRay = 4, ///< FlexRay protocol
kvaDb_ProtocolBEAN = 5, ///< BEAN protocol
kvaDb_ProtocolEthernet = 6, ///< Ethernet protocol
kvaDb_ProtocolAFDX = 7, ///< AFDX protocol
kvaDb_ProtocolJ1708 = 8, ///< J1708 protocol
kvaDb_ProtocolCanFD = 9, ///< Can FD protocol
kvaDb_ProtocolUnknown = 10, ///< Unknown or not specified protocol
} KvaDbProtocolType;
/** @} */
/**
* \name KvaDbProtocolproperties Protocol Properties type
*
* Struct specifying limits of a given protocol. Used in \ref
* kvaDbGetProtocolProperties()
*
* \note maxMessageDlc provides only raw message dlc limit (e.g. 4 bits for CAN).
*
* \sa \kvaDbMsgDlcToBytes()
*/
typedef struct {
unsigned int maxMessageDlc;
unsigned int maxSignalLength;
} KvaDbProtocolProperties;
// Database flags
/**
* \name CANDBDatabaseFlags API Database Flags
* \anchor KVADB_DATABASE_xxx
*
* The following value is used by \ref kvaDbGetFlags().
*/
#define KVADB_DATABASE_J1939 0x0001 ///< The database uses the J1939 protocol
/**
* \name Kvaser Database Handle Types
* @{
*/
typedef void* KvaDbHnd; ///< Database handle
typedef void* KvaDbMessageHnd; ///< Message handle
typedef void* KvaDbSignalHnd; ///< Signal handle
typedef void* KvaDbNodeHnd; ///< Node handle
typedef void* KvaDbAttributeHnd; ///< Attribute handle
typedef void* KvaDbAttributeDefHnd; ///< Attribute definition handle
typedef void* KvaDbEnumValueHnd; ///< Enumeration value handle
/** @} */
/**
* \name Kvaser Database Multiplexer Mode values
* \anchor KVADB_MUX_xxx
* @{
*/
#define KVADB_MUX_SIGNAL -2 ///< Multiplex mode value of a multiplexer signal
#define KVADB_MUX_INDEPENDENT -1 ///< Multiplex mode value of an independent signal
/** @} */
/**
* \ingroup kvadb_database
* This function creates a new database handle.
*
* \param[out] dh A handle to a new database
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbClose()
*/
KvaDbStatus WINAPI kvaDbOpen(KvaDbHnd *dh);
/**
* \ingroup kvadb_database
* This loads a database file into a handle created with \ref kvaDbOpen().
*
* \note This function is deprecated and will be replaced by \ref kvaDbCreate()
*
* \param[in] dh A handle database handle
* \param[in] filename A database file
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbCreate()
*/
KvaDbStatus WINAPI kvaDbAddFile(KvaDbHnd dh, const char *filename);
/**
* \ingroup kvadb_database
* This function creates a new database in a handle created with
* \ref kvaDbOpen(). It is used when there is no file to read data from.
*
* \note This function is deprecated and will be replaced by \ref kvaDbCreate().
*
* \param[in] dh A database handle
* \param[in] filename The the dummy filename to use for this database
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbCreate()
*/
KvaDbStatus WINAPI kvaDbSetDummyFileName(KvaDbHnd dh, const char *filename);
/**
* \ingroup kvadb_database
* This function creates a new database in a handle created with
* \ref kvaDbOpen(). There are three ways to call this function:
*
* \li To load data from an existing database file, set \a localName to \c NULL
* and set \a filename to the database file.
*
* \li To add an empty database, set \a localName to any name and set \a
* filename to \c NULL.
*
* \li To load data from an existing database file and give it a new name, set
* \a localName to the new name and set \a filename to the database file.
* In this case, it will attempt to use period as decimal separator by setting
* an appropriate locale.
* Note that setting locale is not thread safe.
*
* \param[in] dh A database handle
* \param[in] localName The name of the database or \c NULL. The database name
* is used to create qualified names for messages and signals.
* \param[in] filename The database file or \c NULL
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbOpen(), \ref kvaDbGetMsgQualifiedName(),
* \ref kvaDbGetSignalQualifiedName()
*/
KvaDbStatus WINAPI kvaDbCreate(KvaDbHnd dh, const char *localName, const char *filename);
/**
* \ingroup kvadb_database
*
* Get the name of a database as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] dh A database handle.
* \param[out] buf Buffer to receive database name. The database name
* is used to create qualified names for messages and signals.
* \param[in] buflen Buffer size in bytes.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbOpen(), \ref kvaDbGetMsgQualifiedName(),
* \ref kvaDbGetSignalQualifiedName()
*/
KvaDbStatus WINAPI kvaDbGetDatabaseName(KvaDbHnd dh, char *buf, size_t buflen);
/**
* \ingroup kvadb_database
*
* This function gets the version of the KVADBLIB API DLL (kvadblib.dll).
*
* \param[out] major Major version number.
* \param[out] minor Minor version number.
* \param[out] build Build number.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
*/
KvaDbStatus WINAPI kvaDbGetVersion(int *major, int *minor, int *build);
/**
* \ingroup kvadb_database
*
* Get the written description for an error code as a null-terminated string.
* If \a buf is too small, kvaDbErr_Param will be returned.
*
* \param[in] error The error code.
* \param[out] buf Buffer to receive error text.
* \param[in] buflen Buffer size in bytes.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
*/
KvaDbStatus WINAPI kvaDbGetErrorText(KvaDbStatus error, char *buf, size_t buflen);
/**
* \ingroup kvadb_database
* This function retrieves error messages.
* Run directly after function when recieving error code.
* Currently only applies to {kvaDbAddFile, kvaDbCreate, kvaDbReadFile}
*
* \param[out] buf Buffer to receive error message.
* \param[out] buflen Buffer size in bytes.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_Param (negative) if failure
*
* \sa \ref kvaDbOpen()
*/
KvaDbStatus WINAPI kvaDbGetLastParseError(char *buf, unsigned int *buflen);
/**
* \ingroup kvadb_database
* This function closes an open database handle.
*
* \param[in] dh A handle to a database
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbOpen()
*/
KvaDbStatus WINAPI kvaDbClose(KvaDbHnd dh);
/**
* \ingroup kvadb_database
* Write a database to file.
* This function will attempt to use period as decimal separator
* by setting an appropriate locale.
* Note that setting locale is not thread safe.
*
* \param[in] dh A handle to a database
* \param[in] filename The name of the database file
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbReadFile()
*/
KvaDbStatus WINAPI kvaDbWriteFile(KvaDbHnd dh, char* filename);
/**
* \ingroup kvadb_database
* Load a database from file into a handle created with \ref kvaDbOpen().
* This function will attempt to use period as decimal separator by setting
* an appropriate locale.
* Note that setting locale is not thread safe.
*
* \param[out] dh A handle to a database
* \param[in] filename The name of the database file.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbCreate()
*/
KvaDbStatus WINAPI kvaDbReadFile(KvaDbHnd dh, char* filename);
/**
* \ingroup kvadb_database
* Get the database flags.
*
* \param[in] dh A handle to a database
* \param[out] flags The database flags, \ref KVADB_DATABASE_xxx
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbReadFile()
*
* \todo check \ref kvaDbReadFile(), we should perhaps link to \ref kvaDbCreate()?
*/
KvaDbStatus WINAPI kvaDbGetFlags(KvaDbHnd dh, unsigned int *flags);
/**
* \ingroup kvadb_database
* Reads the protocol attribute value of a database
*
* \param[in] dh A handle to a database
* \param[out] prot A handle to protocol type, \ref KvaDbProtocolType
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetProtocol(), \ref kvaDbGetProtocolProperties
*
*/
KvaDbStatus WINAPI kvaDbGetProtocol(KvaDbHnd dh, KvaDbProtocolType *prot);
/**
* \ingroup kvadb_database
* Returns properties of a given protocol, see \ref KvaDbProtocolProperties
*
* \param[in] prot Protocol type, \ref KvaDbProtocolType
* \param[out] prop A handle to protocol properties, \ref KvaDbProtocolProperties
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetProtocol()
*/
KvaDbStatus WINAPI kvaDbGetProtocolProperties(KvaDbProtocolType prot, KvaDbProtocolProperties *prop);
/**
* \ingroup kvadb_messages
* Get the first message in a database.
*
* \param[in] dh A handle to a database
* \param[out] mh A handle to the first message
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetNextMsg()
*/
KvaDbStatus WINAPI kvaDbGetFirstMsg(KvaDbHnd dh, KvaDbMessageHnd *mh);
/**
* \ingroup kvadb_messages
* Get a handle to the next message in a database. Should be called after
* \ref kvaDbGetFirstMsg().
*
* \param[in] dh A database handle
* \param[out] mh A message handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetFirstMsg()
*/
KvaDbStatus WINAPI kvaDbGetNextMsg(KvaDbHnd dh, KvaDbMessageHnd *mh);
/**
* \ingroup kvadb_messages
* Get a handle to a message with a specific identifier.
* If the message requested has an extended id, the id should
* have the \ref KVADB_MESSAGE_EXT flag set.
*
* \param[in] dh A database handle
* \param[in] id The selected message identifier
* \param[out] mh A message handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetMsgByName()
* \sa \ref kvaDbGetMsgByIdEx()
*/
KvaDbStatus WINAPI kvaDbGetMsgById(KvaDbHnd dh,
unsigned int id,
KvaDbMessageHnd *mh);
/**
* \ingroup kvadb_messages
* Get a handle to a message with a specific identifier.
* If the requested message has an extended id, \ref KVADB_MESSAGE_EXT
* should be set on the flags parameter.
* Bits 31..29 of the id are ignored.
*
* \param[in] dh A database handle
* \param[in] id The selected message identifier
* \param[in] flags The flags, \ref KVADB_MESSAGE_xxx
* \param[out] mh A message handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetMsgByName()
*/
KvaDbStatus WINAPI kvaDbGetMsgByIdEx(KvaDbHnd dh,
unsigned int id,
unsigned int flags,
KvaDbMessageHnd *mh);
/**
* \ingroup kvadb_messages
* Get a handle to a message with a specific PGN-identifier.
* If the message is marked as J1939, checks if the PGN-part is equal.
* The message identifier needs to contain the \ref KVADB_MESSAGE_EXT flag.
* \param[in] dh A database handle
* \param[in] id The selected message identifier
* \param[out] mh A message handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetMsgByName()
* \sa \ref kvaDbGetMsgByPGNEx()
*/
KvaDbStatus WINAPI kvaDbGetMsgByPGN(KvaDbHnd dh,
unsigned int id,
KvaDbMessageHnd *mh);
/**
* \ingroup kvadb_messages
* Get a handle to a J1939 message using the PGN-identifier within the CAN id.
* All bits in the id that are not part of the PGN are ignored.
* \param[in] dh A database handle
* \param[in] id The selected message identifier
* \param[out] mh A message handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetMsgByName()
*/
KvaDbStatus WINAPI kvaDbGetMsgByPGNEx(KvaDbHnd dh,
unsigned int id,
KvaDbMessageHnd *mh);
/**
* \ingroup kvadb_messages
* Get a handle to a message with a specific name.
*
* \param[in] dh A databse handle
* \param[in] msg_name The message name to search for
* \param[out] mh A message handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetMsgById()
*/
KvaDbStatus WINAPI kvaDbGetMsgByName(KvaDbHnd dh,
const char *msg_name,
KvaDbMessageHnd *mh);
/**
* \ingroup kvadb_messages
*
* Get the name of a message as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] mh A message handle
* \param[out] buf The buffer that will hold the message name
* \param[in] buflen The length of the buffer.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetMsgName(), \ref kvaDbGetMsgQualifiedName()
*/
KvaDbStatus WINAPI kvaDbGetMsgName(KvaDbMessageHnd mh, char *buf, size_t buflen);
/**
* \ingroup kvadb_messages
*
* Get the qualified message name, which is the database name and the message
* name separated by a dot, as a null-terminated string.
* An empty string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] mh A message handle
* \param[out] buf The buffer that will hold the qualified message name
* \param[in] buflen The length of the buffer
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetMsgName()
*/
KvaDbStatus WINAPI kvaDbGetMsgQualifiedName(KvaDbMessageHnd mh, char *buf, size_t buflen);
/**
* \ingroup kvadb_messages
*
* Get the comment for a message as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] mh A message handle
* \param[out] buf The buffer that will hold the message comment
* \param[in] buflen The length of the buffer
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetMsgComment()
*/
KvaDbStatus WINAPI kvaDbGetMsgComment(KvaDbMessageHnd mh, char *buf, size_t buflen);
/**
* \ingroup kvadb_messages
* Get message identifier and flags.
* If message is of extended CAN format, its id will contain
* \ref KVADB_MESSAGE_EXT flag.
* This call is deprecated. Consider using \ref kvaDbGetMsgIdEx()
* and \ref kvaDbGetMsgFlags() instead.
*
* \param[in] mh A message handle.
* \param[out] id The identifier.
* \param[out] flags The flags, \ref KVADB_MESSAGE_xxx
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetMsgId()
*/
KvaDbStatus WINAPI kvaDbGetMsgId(KvaDbMessageHnd mh,
unsigned int *id,
unsigned int *flags);
/**
* \ingroup kvadb_messages
* Get the message identifier.
* The message identifier will not contain any flags.
*
* \param[in] mh A message handle
* \param[out] id The message identifier
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
*
* \sa \ref kvaDbSetMsgIdEx()
*/
KvaDbStatus WINAPI kvaDbGetMsgIdEx(KvaDbMessageHnd mh, unsigned int *id);
/**
* \ingroup kvadb_messages
* Get the message flags, \ref KVADB_MESSAGE_xxx
*
* \param[in] mh A message handle
* \param[out] flags The message flags, \ref KVADB_MESSAGE_xxx
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
*
* \sa \ref kvaDbSetMsgFlags()
*/
KvaDbStatus WINAPI kvaDbGetMsgFlags(KvaDbMessageHnd mh, unsigned int *flags);
/**
* \ingroup kvadb_messages
* Get relevant message attributes expressed as CAN message flags, see \ref canMSG_xxx and \ref canFDMSG_xxx
*
* Note that canFDMSG_BRS will never be returned for non-CAN FD frames, even though the CANFD_BRS attribute
* was set in the .dbc file.
*
* \param[in] mh A message handle
* \param[out] flags The message flags, \ref KVADB_MESSAGE_xxx
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
*/
KvaDbStatus WINAPI kvaDbGetCanMsgFlags(KvaDbMessageHnd mh, unsigned int *flags);
/**
* \ingroup kvadb_messages
* Get the data length code for a message.
*
* \param[in] mh A message handle
* \param[out] dlc The data length code
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetMsgDlc()
*/
KvaDbStatus WINAPI kvaDbGetMsgDlc(KvaDbMessageHnd mh, int *dlc);
/**
* \ingroup kvadb_messages
* Get send node for a message
*
* \param[in] mh A message handle
* \param[out] nh A node handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbSetMsgSendNode()
*/
KvaDbStatus WINAPI kvaDbGetMsgSendNode(KvaDbMessageHnd mh, KvaDbNodeHnd *nh);
/**
* \ingroup kvadb_messages
* Add a new message to a database.
*
* \param[in] dh A database handle
* \param[out] mh A handle to the new message
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbDeleteMsg()
*/
KvaDbStatus WINAPI kvaDbAddMsg(KvaDbHnd dh, KvaDbMessageHnd *mh);
/**
* \ingroup kvadb_messages
* Delete a message from a database.
*
* \param[in] dh A database handle
* \param[in] mh A handle to the message that will be deleted
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbAddMsg()
*/
KvaDbStatus WINAPI kvaDbDeleteMsg(KvaDbHnd dh, KvaDbMessageHnd mh);
/**
* \ingroup kvadb_database
* Set the database flags.
*
* \note This feature is currently not enabled.
*
* \param[in] dh A database handle
* \param[in] flags The flags to set, \ref KVADB_DATABASE_xxx
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetFlags()
*/
KvaDbStatus WINAPI kvaDbSetFlags(KvaDbHnd dh, unsigned int flags);
/**
* \ingroup kvadb_database
* Writes the protocol attribute value of a database
*
* \param[in] dh A handle to a database
* \param[in] prot Protocol type value, \ref KvaDbProtocolType
*/
KvaDbStatus WINAPI kvaDbSetProtocol(KvaDbHnd dh, KvaDbProtocolType prot);
/**
* \ingroup kvadb_messages
* Set the message name.
*
* \param[in] mh A message handle
* \param[in] buf The buffer that contains the message name.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \note Please note that allowed characters in identiers are digits, letters and "_" (underscore). <br>
* Identifiers shall also start with a letter or underscore.
*
* \sa \ref kvaDbGetMsgName()
*/
KvaDbStatus WINAPI kvaDbSetMsgName(KvaDbMessageHnd mh, char *buf);
/**
* \ingroup kvadb_messages
* Set the message comment.
*
* \param[in] mh A message handle
* \param[in] buf The buffer that contains the message comment
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetMsgComment()
*/
KvaDbStatus WINAPI kvaDbSetMsgComment(KvaDbMessageHnd mh, char *buf);
/**
* \ingroup kvadb_messages
* Set the message identifier and flags.
* If message is of extended CAN format, its id should contain
* \ref KVADB_MESSAGE_EXT flag.
* This call is deprecated, consider using \ref kvaDbSetMsgIdEx()
* and \ref kvaDbSetMsgFlags() instead.
*
* \param[in] mh A message handle
* \param[in] id The message identifier
* \param[in] flags The message flags, \ref KVADB_MESSAGE_xxx
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
*
* \sa \ref kvaDbGetMsgId()
*/
KvaDbStatus WINAPI kvaDbSetMsgId(KvaDbMessageHnd mh, unsigned int id, unsigned int flags);
/**
* \ingroup kvadb_messages
* Set the message identifier.
* The message identifier should not contain any flags.
*
* \param[in] mh A message handle
* \param[in] id The message identifier
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
*
* \sa \ref kvaDbGetMsgIdEx()
*/
KvaDbStatus WINAPI kvaDbSetMsgIdEx(KvaDbMessageHnd mh, unsigned int id);
/**
* \ingroup kvadb_messages
* Set the message flags, \ref KVADB_MESSAGE_xxx
*
* \param[in] mh A message handle
* \param[in] flags The message flags, \ref KVADB_MESSAGE_xxx
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
*
* \sa \ref kvaDbGetMsgFlags()
*/
KvaDbStatus WINAPI kvaDbSetMsgFlags(KvaDbMessageHnd mh, unsigned int flags);
/**
* \ingroup kvadb_messages
* Set the data length code for a message.
*
* \param[in] mh A message handle
* \param[in] dlc The data length code
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetMsgDlc()
*/
KvaDbStatus WINAPI kvaDbSetMsgDlc(KvaDbMessageHnd mh, int dlc);
/**
* \ingroup kvadb_messages
* Set send node for a message
*
* \param[in] mh A message handle
* \param[in] nh A node handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetMsgSendNode()
*/
KvaDbStatus WINAPI kvaDbSetMsgSendNode(KvaDbMessageHnd mh, KvaDbNodeHnd nh);
/**
* \ingroup kvadb_messages
* Returns handle to a multiplexer signal of a given message.
* If there are no multiplexer signal, KvaDbOk will be returned
* and \a *sh will be \c NULL.
*
* \param[in] mh A message handle
* \param[out] sh Multiplexer signal handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetMsgMux(KvaDbMessageHnd mh, KvaDbSignalHnd *sh);
/**
* \ingroup kvadb_signals
* Get the first signal in a message.
*
* \param[in] mh A message handle
* \param[out] sh A handle to the first signal
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetNextSignal()
*/
KvaDbStatus WINAPI kvaDbGetFirstSignal(KvaDbMessageHnd mh, KvaDbSignalHnd *sh);
/**
* \ingroup kvadb_signals
* Get the next signal in a message. Should be called after
* \ref kvaDbGetFirstSignal().
*
* \param[in] mh A message handle
* \param[out] sh A handle to the next signal
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetFirstSignal
*/
KvaDbStatus WINAPI kvaDbGetNextSignal(KvaDbMessageHnd mh, KvaDbSignalHnd *sh);
/**
* \ingroup kvadb_signals
* Get a signal handle by seaching for the signals's name.
*
* \param[in] mh A message handle
* \param[in] buf The buffer that contains the name of the signal to search for
* \param[out] sh A handle to the signal
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetFirstMsg()
*/
KvaDbStatus WINAPI kvaDbGetSignalByName(KvaDbMessageHnd mh, char *buf, KvaDbSignalHnd *sh);
/**
* \ingroup kvadb_signals
* Sets signal's multiplex mode. If value is equal to KVADB_MUX_SIGNAL, marks signal as a multiplexer.
*
* \param[in] sh A signal handle
* \param[in] mux Signal's multiplex mode
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
* \sa \ref KVADB_MUX_xxx
*/
KvaDbStatus WINAPI kvaDbSetSignalMode(KvaDbSignalHnd sh, int mux);
/**
* \ingroup kvadb_signals
* Gets mux from multiplexer mode value of given signal.
* See \ref KVADB_MUX_xxx for special (negative) values of multiplexer mode.
*
* \param[in] sh A signal handle
* \param[out] mux Signal's multiplex mode
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
* \sa \ref KVADB_MUX_xxx
*/
KvaDbStatus WINAPI kvaDbGetSignalMode(KvaDbSignalHnd sh, int *mux);
/**
* \ingroup kvadb_signals
* Get handle to message, which given signal is associated with.
*
* \param[in] sh A signal handle
* \param[out] mh Signal's message
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbStoreSignalValuePhys()
*/
KvaDbStatus WINAPI kvaDbGetSignalMessage(KvaDbSignalHnd sh, KvaDbMessageHnd *mh);
/**
* \ingroup kvadb_signals
* Retrieve signal's physical (floating-point) value from can data.
*
* This function is deprecated and should not be used.
* Consider \ref kvaDbRetrieveSignalValuePhys() instead
*
* \param[in] sh A signal handle
* \param[out] f The converted value
* \param[in] data The data buffer to be converted
* \param[in] len The length of the data buffer
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbStoreSignalValuePhys()
*/
KvaDbStatus WINAPI kvaDbGetSignalValueFloat(KvaDbSignalHnd sh, double *f, void *data, size_t len);
/**
* \ingroup kvadb_signals
* Retrieve signal's raw (integer) value from can data.
*
* This function is deprecated and should not be used.
* Consider \ref kvaDbRetrieveSignalValueRaw() instead
*
* \param[in] sh A signal handle
* \param[out] f The converted value
* \param[in] data The data buffer to be converted
* \param[in] len The length of the data buffer
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbStoreSignalValueRaw()
*/
KvaDbStatus WINAPI kvaDbGetSignalValueInteger(KvaDbSignalHnd sh, int *f, void *data, size_t len);
/**
* \ingroup kvadb_signals
* Retrieve signal's physical (floating-point) value from can data.
*
* \param[in] sh A signal handle
* \param[out] value The converted value
* \param[in] data The data buffer to be converted
* \param[in] len The length of the data buffer
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbStoreSignalValuePhys()
*/
KvaDbStatus WINAPI kvaDbRetrieveSignalValuePhys(KvaDbSignalHnd sh, double *value, void *data, size_t len);
/**
* \ingroup kvadb_signals
* Retrieve signal's raw (integer) value from can data.
*
* \param[in] sh A signal handle
* \param[out] value The converted value
* \param[in] data The data buffer to be converted
* \param[in] len The length of the data buffer
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbStoreSignalValueRaw()
*/
KvaDbStatus WINAPI kvaDbRetrieveSignalValueRaw(KvaDbSignalHnd sh, int *value, void *data, size_t len);
/**
* \ingroup kvadb_signals
* Retrieve signal's raw (integer) value from can data.
*
* \param[in] sh A signal handle
* \param[out] value The converted value (64-bits)
* \param[in] data The data buffer to be converted
* \param[in] len The length of the data buffer
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbStoreSignalValueRaw64()
*/
KvaDbStatus WINAPI kvaDbRetrieveSignalValueRaw64(KvaDbSignalHnd sh, uint64_t *value, void *data, size_t len);
/**
* \ingroup kvadb_signals
* Retrieve signal's enumeration (string) value from can data.
*
* \param[in] sh A signal handle
* \param[out] buf The buffer that will hold the enumeration string
* \param[in] buflen The length of the buffer.
* \param[in] data The data buffer to be converted
* \param[in] len The length of the data buffer
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbStoreSignalValueRaw()
*/
KvaDbStatus WINAPI kvaDbGetSignalValueEnum(KvaDbSignalHnd sh, char *buf, size_t buflen, void *data, size_t len);
/**
* \ingroup kvadb_signals
* Get the minimum and maximum values from a signal.
*
* \param[in] sh A signal handle
* \param[out] minval The minimum value
* \param[out] maxval The maximum value
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetSignalValueLimits()
*/
KvaDbStatus WINAPI kvaDbGetSignalValueLimits(KvaDbSignalHnd sh, double *minval, double *maxval);
/**
* \ingroup kvadb_signals
* Get the scale factor and offset from a signal.
*
* \param[in] sh A signal handle
* \param[out] factor The signal scale factor
* \param[out] offset The signal offset
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetSignalValueScaling()
*/
KvaDbStatus WINAPI kvaDbGetSignalValueScaling(KvaDbSignalHnd sh, double *factor, double *offset);
/**
* \ingroup kvadb_signals
* Get the size and position of the signal value.
*
* \param[in] sh A signal handle
* \param[out] startbit The bit where the signal value starts
* \param[out] length The length of the signal value in bits
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetSignalValueSize()
*/
KvaDbStatus WINAPI kvaDbGetSignalValueSize(KvaDbSignalHnd sh, int *startbit, int *length);
/**
* \ingroup kvadb_signals
*
* Get the name of a signal as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] sh A signal handle.
* \param[out] buf The signal name.
* \param[in] buflen The length of the buffer that will hold the signal name.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetSignalName()
*/
KvaDbStatus WINAPI kvaDbGetSignalName(KvaDbSignalHnd sh, char *buf, size_t buflen);
/**
* \ingroup kvadb_signals
*
* Get the qualified signal name, which is the database, message and signal
* names separated by dots, as a null-terminated string.
* An empty string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] sh A signal handle
* \param[out] buf The qualified signal name
* \param[in] buflen The length of the buffer that will hold the qualified
* signal name
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetSignalName()
*/
KvaDbStatus WINAPI kvaDbGetSignalQualifiedName(KvaDbSignalHnd sh, char *buf, size_t buflen);
/**
* \ingroup kvadb_signals
*
* Get the comment for a signal as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] sh A signal handle
* \param[out] buf The signal comment
* \param[in] buflen The length of the buffer that will hold the signal comment
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetSignalComment()
*/
KvaDbStatus WINAPI kvaDbGetSignalComment(KvaDbSignalHnd sh, char *buf, size_t buflen);
/**
* \ingroup kvadb_signals
*
* Get the signal unit as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] sh A signal handle
* \param[out] buf The signal unit
* \param[in] buflen The length of the buffer that will hold the signal unit
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetSignalUnit()
*/
KvaDbStatus WINAPI kvaDbGetSignalUnit(KvaDbSignalHnd sh, char *buf, size_t buflen);
/**
* \ingroup kvadb_signals
* Get the signal encoding.
*
* \param[in] sh A signal handle
* \param[out] e The signal encoding, Intel or Motorola, \ref KvaDbSignalEncoding
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetSignalEncoding()
*/
KvaDbStatus WINAPI kvaDbGetSignalEncoding(KvaDbSignalHnd sh, KvaDbSignalEncoding *e);
/**
* \ingroup kvadb_signals
* Get the signal representation type.
*
* \param[in] sh A signal handle
* \param[out] t The signal representation type, \ref KvaDbSignalType
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetSignalRepresentationType()
*/
KvaDbStatus WINAPI kvaDbGetSignalRepresentationType(KvaDbSignalHnd sh, KvaDbSignalType *t);
/**
* \ingroup kvadb_signals
* Get the signal representation type.
*
* \note This function is deprecated and will be replaced by
* \ref kvaDbGetSignalRepresentationType()
*
* \param[in] sh
* \param[out] t The signal representation type, \ref KvaDbSignalType
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbSetSignalRepresentationType()
*/
KvaDbStatus WINAPI kvaDbGetSignalPresentationType(KvaDbSignalHnd sh, KvaDbSignalType *t);
/**
* \ingroup kvadb_signals
* Add a new signal to a message.
*
* \param[in] mh A message handle
* \param[out] sh A handle to the new signal
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbDeleteSignal()
*/
KvaDbStatus WINAPI kvaDbAddSignal(KvaDbMessageHnd mh, KvaDbSignalHnd *sh);
/**
* \ingroup kvadb_signals
* Delete a signal from a message.
*
* \param[in] mh A message handle
* \param[in] sh A handle to the signal to delete
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbAddSignal()
*/
KvaDbStatus WINAPI kvaDbDeleteSignal(KvaDbMessageHnd mh, KvaDbSignalHnd sh);
/**
* \ingroup kvadb_signals
* Set the value limits for a signal.
*
* \param[in] sh A signal handle
* \param[in] minval The minimum signal value
* \param[in] maxval The maximum signal value
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetSignalValueLimits()
*/
KvaDbStatus WINAPI kvaDbSetSignalValueLimits(KvaDbSignalHnd sh,
double minval,
double maxval);
/**
* \ingroup kvadb_signals
* Set the scale factor and offset for a signal.
*
* \param[in] sh A signal handle
* \param[in] factor The scale factor for the signal value
* \param[in] offset The offset for the signal value
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetSignalValueScaling()
*/
KvaDbStatus WINAPI kvaDbSetSignalValueScaling(KvaDbSignalHnd sh,
double factor,
double offset);
/**
* \ingroup kvadb_signals
* Set the value position and size for a signal.
*
* \param[in] sh A signal handle
* \param[in] startbit The starting bit of the signal's value
* \param[in] length The length of the value in bits
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetSignalValueSize()
*/
KvaDbStatus WINAPI kvaDbSetSignalValueSize(KvaDbSignalHnd sh,
int startbit,
int length);
/**
* \ingroup kvadb_signals
* Set the signal name.
*
* \param[in] sh A signal handle
* \param[in] buf The buffer that contains the signal name
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \note Please note that allowed characters in identiers are digits, letters and "_" (underscore). <br>
* Identifiers shall also start with a letter or underscore.
*
* \sa \ref kvaDbGetSignalName()
*/
KvaDbStatus WINAPI kvaDbSetSignalName(KvaDbSignalHnd sh, char *buf);
/**
* \ingroup kvadb_signals
* Set the signal comment.
*
* \param[in] sh A signal handle
* \param[in] buf The buffer that contains the signal comment
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetSignalComment()
*/
KvaDbStatus WINAPI kvaDbSetSignalComment(KvaDbSignalHnd sh, char *buf);
/**
* \ingroup kvadb_signals
* Set the signal unit.
*
* \param[in] sh A signal handle
* \param[in] buf The buffer that contains the unit for the signal
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetSignalUnit()
*/
KvaDbStatus WINAPI kvaDbSetSignalUnit(KvaDbSignalHnd sh, char *buf);
/**
* \ingroup kvadb_signals
* Set the signal encoding.
*
* \param[in] sh A signal handle
* \param[in] e The signal encoding, Intel or Motorola, \ref KvaDbSignalEncoding
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetSignalEncoding()
*/
KvaDbStatus WINAPI kvaDbSetSignalEncoding(KvaDbSignalHnd sh, KvaDbSignalEncoding e);
/**
* \ingroup kvadb_signals
* Set the signal representation type.
*
* \param[in] sh A signal handle
* \param[in] t The signal representation type, \ref KvaDbSignalType
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetSignalRepresentationType()
*/
KvaDbStatus WINAPI kvaDbSetSignalRepresentationType(KvaDbSignalHnd sh, KvaDbSignalType t);
/**
* \ingroup kvadb_nodes
* Get the first node.
*
* \param[in] dh A database handle
* \param[out] nh A node handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetNextNode()
*/
KvaDbStatus WINAPI kvaDbGetFirstNode(KvaDbHnd dh, KvaDbNodeHnd *nh);
/**
* \ingroup kvadb_nodes
* Get the next node. Should be called after kvaDbGetFirstNode().
*
* \param[in] dh A database handle
* \param[out] nh A handle to the next node
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetNodeByName()
*/
KvaDbStatus WINAPI kvaDbGetNextNode(KvaDbHnd dh, KvaDbNodeHnd *nh);
/**
* \ingroup kvadb_nodes
* Get a node by seaching for the node's name.
*
* \param[in] dh A database handle
* \param[in] node_name The buffer that contains the node name to search for
* \param[out] nh A node handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetNodeByName(KvaDbHnd dh, const char *node_name, KvaDbNodeHnd *nh);
/**
* \ingroup kvadb_attributes
* Get the value of a node attribute as an integer.
* This call is deprecated, it is equivalent to sequence of
* \ref kvaDbGetNodeAttributeByName() and \ref kvaDbGetAttributeValueInt(),
* which should be used instead.
*
* \param[in] nh A node handle
* \param[in] attrName The buffer that contains the attribute name
* \param[out] val The value of the attribute
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetFirstNode()
*/
KvaDbStatus WINAPI kvaDbGetNodeAttributeIntByName(KvaDbNodeHnd nh, const char *attrName, int *val);
/**
* \ingroup kvadb_nodes
* Add a new node to a database.
*
* \param[in] dh A database handle
* \param[out] nh A handle to the new node
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbAddNode(KvaDbHnd dh, KvaDbNodeHnd *nh);
/**
* \ingroup kvadb_nodes
* Delete a node from a database.
*
* \param[in] dh A database handle
* \param[in] nh A handle to the node that will be deleted
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbDeleteNode(KvaDbHnd dh, KvaDbNodeHnd nh);
/**
* \ingroup kvadb_nodes
* Set the node name.
*
* \param[in] nh A node handle
* \param[in] buf The buffer that contains the node name.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \note Please note that allowed characters in identiers are digits, letters and "_" (underscore). <br>
* Identifiers shall also start with a letter or underscore.
*
*/
KvaDbStatus WINAPI kvaDbSetNodeName(KvaDbNodeHnd nh, char *buf);
/**
* \ingroup kvadb_nodes
*
* Get the name of a node as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] nh A node handle
* \param[out] buf The buffer that will contain the node name
* \param[in] buflen The length of the data buffer
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetNodeName(KvaDbNodeHnd nh, char *buf, size_t buflen);
/**
* \ingroup kvadb_nodes
* Set the node comment.
*
* \param[in] nh A node handle
* \param[in] buf The buffer that contains the node comment
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbSetNodeComment(KvaDbNodeHnd nh, char *buf);
/**
* \ingroup kvadb_nodes
*
* Get the comment for a node as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] nh A node handle
* \param[out] buf The buffer that will contain the node comment
* \param[in] buflen The length of the data buffer
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetNodeComment(KvaDbNodeHnd nh, char *buf, size_t buflen);
/**
* \ingroup kvadb_nodes
* Add a receiving node to a signal.
*
* \param[in] sh A signal handle
* \param[in] nh A node handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbAddReceiveNodeToSignal(KvaDbSignalHnd sh, KvaDbNodeHnd nh);
/**
* \ingroup kvadb_nodes
* Remove a receiving node from a signal.
*
* \param[in] sh A signal handle
* \param[in] nh A node handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbRemoveReceiveNodeFromSignal(KvaDbSignalHnd sh, KvaDbNodeHnd nh);
/**
* \ingroup kvadb_nodes
* Check if a signal contains a specific receiving node
*
* \param[in] sh A signal handle
* \param[in] nh A node handle
*
* \return \ref kvaDbOK (zero) if the signal contains the node
* \return \ref kvaDbErr_NoNode if the signal doesn't contain the node
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbSignalContainsReceiveNode(KvaDbSignalHnd sh, KvaDbNodeHnd nh);
/**
* \ingroup kvadb_signals
* Convert a physical signal value to data bytes.
*
* \param[in] sh A signal handle
* \param[out] can_data The buffer that will hold the converted value
* \param[in] len The length of the data buffer
* \param[in] value The physical signal value to convert
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetSignalValueFloat()
*/
KvaDbStatus WINAPI kvaDbStoreSignalValuePhys(KvaDbSignalHnd sh, void *can_data, int len, double value);
/**
* \ingroup kvadb_signals
* Convert a raw signal value to data bytes.
*
* \param[in] sh A signal handle
* \param[out] can_data The buffer that will hold the converted value
* \param[in] len The length of the data buffer
* \param[in] value The raw signal value to convert
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbRetrieveSignalValueRaw()
*/
KvaDbStatus WINAPI kvaDbStoreSignalValueRaw(KvaDbSignalHnd sh, void *can_data, int len, int value);
/**
* \ingroup kvadb_signals
* Convert a raw signal value to data bytes.
*
* \param[in] sh A signal handle
* \param[out] can_data The buffer that will hold the converted value
* \param[in] len The length of the data buffer
* \param[in] value The raw signal value to convert (64-bits)
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbRetrieveSignalValueRaw64()
*/
KvaDbStatus WINAPI kvaDbStoreSignalValueRaw64(KvaDbSignalHnd sh, void *can_data, int len, uint64_t value);
/**
* \ingroup kvadb_attributes
* Get a handle to the first attribute defined in the database.
*
* \param[in] dh A handle to a database
* \param[out] adh First attribute definition handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetNextAttributeDefinition()
*/
KvaDbStatus WINAPI kvaDbGetFirstAttributeDefinition(KvaDbHnd dh, KvaDbAttributeDefHnd *adh);
/**
* \ingroup kvadb_attributes
* Get a handle to an attribute definition with specified name.
*
* \param[in] dh A handle to a database
* \param[in] attrName The attribute name to search for
* \param[out] adh An attribute definition handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionByName(KvaDbHnd dh, const char *attrName, KvaDbAttributeDefHnd *adh);
/**
* \ingroup kvadb_attributes
* Get a handle to the following attribute defined.
*
* \param[in] adh An existing handle to an attribute definition
* \param[out] nadh Handle to next attribute definition
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetFirstAttributeDefinition()
*/
KvaDbStatus WINAPI kvaDbGetNextAttributeDefinition(KvaDbAttributeDefHnd adh, KvaDbAttributeDefHnd *nadh);
/**
* \ingroup kvadb_attributes
* Get the type for an attribute definition.
*
* \param[in] adh A handle to an attribute definition
* \param[out] at The type of the attribute definition
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetAttributeDefinitionOwner()
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionType(KvaDbAttributeDefHnd adh, KvaDbAttributeType *at);
/**
* \ingroup kvadb_attributes
* Get the type for an attribute definition.
*
* \param[in] adh A handle to an attribute definition
* \param[out] ao The owner of the attribute definition, \ref kvadb_AttributeOwnerXXX
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetAttributeDefinitionType()
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionOwner(KvaDbAttributeDefHnd adh, KvaDbAttributeOwner *ao);
/**
* \ingroup kvadb_attributes
*
* Get the name of an attribute definition as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] adh A handle to an attribute
* \param[out] buf The buffer that will hold the attribute name
* \param[in] buflen The length of the buffer.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetAttributeDefinitionType()
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionName(KvaDbAttributeDefHnd adh, char *buf, size_t buflen);
/**
* \ingroup kvadb_attributes
* Get limits and default value for an attribute definition of type integer.
*
* \param[in] adh A handle to an attribute definition
* \param[out] def The default value of the attribute definition
* \param[out] min The min value of the attribute definition
* \param[out] max The max value of the attribute definition
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionInt(KvaDbAttributeDefHnd adh, int *def, int *min, int *max);
/**
* \ingroup kvadb_attributes
* Get limits and default value for an attribute definition of type float.
*
* \param[in] adh A handle to an attribute definition
* \param[out] def The default value of the attribute definition
* \param[out] min The min value of the attribute definition
* \param[out] max The max value of the attribute definition
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionFloat(KvaDbAttributeDefHnd adh, float *def, float *min, float *max);
/**
* \ingroup kvadb_attributes
*
* Get default value for an attribute definition of type string as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] adh A handle to an attribute definition
* \param[out] buf The buffer that holds the default value of the attribute
* \param[out] buflen The length of the buffer.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionString(KvaDbAttributeDefHnd adh, char *buf, size_t buflen);
/**
* \ingroup kvadb_attributes
* Get default value for an attribute definition of type enumeration.
*
* \param[in] adh A handle to an attribute definition
* \param[out] def The default value of the attribute definition
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionEnumeration(KvaDbAttributeDefHnd adh, int *def);
/**
* \ingroup kvadb_attributes
* Add a new attribute definition to a database.
*
* \param[in] dh A handle to a database
* \param[out] adh A handle to a new attribute definition
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbAddAttributeDefinition(KvaDbHnd dh, KvaDbAttributeDefHnd *adh);
/**
* \ingroup kvadb_attributes
* Delete a database attribute definition.
*
* \note If there are attributes using the attribute definition \a adh, the call will fail and
* return \ref kvaDbErr_InUse. Delete these attributes and the call will succeed.
*
* \param[in] dh A handle to a database
* \param[in] adh A handle to a attribute definition
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbDeleteAttributeDefinition(KvaDbHnd dh, KvaDbAttributeDefHnd adh);
/**
* \ingroup kvadb_attributes
* Set the name of an attribute definition.
* It is not allowed to have several attribute definitions with same name.
*
* \param[in] adh A handle to a attribute definition
* \param[in] adName The name of the attribute definition
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \note Please note that allowed characters in identiers are digits, letters and "_" (underscore). <br>
* Identifiers shall also start with a letter or underscore.
*
*/
KvaDbStatus WINAPI kvaDbSetAttributeDefinitionName(KvaDbAttributeDefHnd adh, const char *adName);
/**
* \ingroup kvadb_attributes
* Set the type of an attribute definition.
*
* \param[in] adh A handle to a attribute definition
* \param[in] adType The type of the attribute definition
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbSetAttributeDefinitionType(KvaDbAttributeDefHnd adh, KvaDbAttributeType adType);
/**
* \ingroup kvadb_attributes
* Set the owner of an attribute definition.
*
* \param[in] adh A handle to a attribute definition
* \param[in] adOwner The owner of the attribute definition
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbSetAttributeDefinitionOwner(KvaDbAttributeDefHnd adh, KvaDbAttributeOwner adOwner);
/**
* \ingroup kvadb_attributes
* Add a enumeration value to an attribute definition of enumeration type. If
* enumeration entry with specified value already exists, it will be
* overwritten. Enumeration entries assume to start with value zero, which is
* then incremented by one for consequent entries.
*
* \note In case \a eValue is out of order, i.e. exceeds maximum value by more
* than one, or was not started at zero, additional dummy entries with name
* "reserved" will be added to enumeration.
*
* \param[in] adh A handle to a attribute definition
* \param[in] eName The name of the enumeration entry
* \param[in] eValue The value of the enumeration entry
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbAddAttributeDefinitionEnum(KvaDbAttributeDefHnd adh, const char* eName, int eValue);
/**
* \ingroup kvadb_attributes
* Deletes the first enumeration entry that matches eName and eValue.
*
* \param[in] adh A handle to a attribute definition
* \param[in] eName The name of the enumeration entry
* \param[in] eValue The value of the enumeration entry
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbDeleteAttributeDefinitionEnum(KvaDbAttributeDefHnd adh, const char* eName, int eValue);
/**
* \ingroup kvadb_attributes
* Get value of an enumeration entry by its name in attribute definition.
*
* \note If there are several entries with same name, the minimum value of the
* entries with the name \a eName is returned.
*
* \param[in] adh A handle to a attribute definition
* \param[in] eName The name of the enumeration entry
* \param[out] eValue The value of the enumeration entry
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionEnumValueByName(KvaDbAttributeDefHnd adh, const char* eName, int* eValue);
/**
* \ingroup kvadb_attributes
* Get name of an enumeration entry by its value in attribute definition. Name
* is written to a buffer provided by user. If buffer size is insufficient to
* fit enumeration name, buffer size parameter will contain required buffer
* size.
*
* \param[in] adh A handle to a attribute definition
* \param[in] eValue The value of the enumeration entry
* \param[out] buf Buffer to receive enumeration name
* \param[out] buflen Buffer size in bytes
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionEnumNameByValue(KvaDbAttributeDefHnd adh, int eValue, char* buf, size_t *buflen);
/**
* \ingroup kvadb_attributes
* Get name and value for the first enumeration entry for this handle. Name
* is written to a buffer provided by user. If buffer size is insufficient to
* fit enumeration name, buffer size parameter will contain required buffer
* size.
*
* To get the next enumeration entry vall \ref kvaDbGetAttributeDefinitionEnumNext().
*
* \param[in] adh A handle to a attribute definition
* \param[out] eValue The value of the enumeration entry
* \param[out] eName Buffer to receive enumeration name
* \param[in] buflen Buffer size in bytes
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionEnumFirst(KvaDbAttributeDefHnd adh, int *eValue, char* eName, size_t *buflen);
/**
* \ingroup kvadb_attributes
* \note Shall be called after \ref kvaDbGetAttributeDefinitionEnumFirst().
*
* Get name and value for the next enumeration entry for this handle. Name
* is written to a buffer provided by user. If buffer size is insufficient to
* fit enumeration name, buffer size parameter will contain required buffer
* size.
*
* \param[in] adh A handle to a attribute definition
* \param[out] eValue The value of the enumeration entry
* \param[out] eName Buffer to receive enumeration name
* \param[in] buflen Buffer size in bytes
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetAttributeDefinitionEnumNext(KvaDbAttributeDefHnd adh, int *eValue, char* eName, size_t *buflen);
/**
* \ingroup kvadb_attributes
* Set the default enumeration value of an attribute definition of enumeration type.
*
* \param[in] adh A handle to a attribute definition
* \param[in] dValue The default value of the enumeration entry
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbSetAttributeDefinitionEnumDefault(KvaDbAttributeDefHnd adh, int dValue);
/**
* \ingroup kvadb_attributes
* Set max, min and default value of an attribute definition of integer type.
*
* \param[in] adh A handle to a attribute definition
* \param[in] def The default value
* \param[in] min The minimum value
* \param[in] max The maximum value
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbSetAttributeDefinitionInt(KvaDbAttributeDefHnd adh, int def, int min, int max);
/**
* \ingroup kvadb_attributes
* Set max, min and default value of an attribute definition of floating point type.
*
* \param[in] adh A handle to a attribute definition
* \param[in] def The default value
* \param[in] min The minimum value
* \param[in] max The maximum value
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbSetAttributeDefinitionFloat(KvaDbAttributeDefHnd adh, float def, float min, float max);
/**
* \ingroup kvadb_attributes
* Set the default value of an attribute definition of string.
*
* \param[in] adh A handle to a attribute definition
* \param[in] buf The default value
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbSetAttributeDefinitionString(KvaDbAttributeDefHnd adh, const char *buf);
/**
* \ingroup kvadb_attributes
* Add an attribute to a message.
*
* \param[in] mh A handle to a message
* \param[in] adh A handle to an attribute definition
* \param[out] ah An attribute handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbDeleteMsgAttribute()
*/
KvaDbStatus WINAPI kvaDbAddMsgAttribute(KvaDbMessageHnd mh, KvaDbAttributeDefHnd adh, KvaDbAttributeHnd *ah);
/**
* \ingroup kvadb_attributes
* Add an attribute to a database.
*
* \param[in] dh A handle to a database
* \param[in] adh A handle to an attribute definition
* \param[out] ah An attribute handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbDeleteAttribute()
*/
KvaDbStatus WINAPI kvaDbAddAttribute(KvaDbHnd dh, KvaDbAttributeDefHnd adh, KvaDbAttributeHnd *ah);
/**
* \ingroup kvadb_attributes
* Delete an attribute from a message.
*
* \param[in] mh A handle to a message
* \param[in] ah A handle to an attribute
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbAddMsgAttribute()
*/
KvaDbStatus WINAPI kvaDbDeleteMsgAttribute(KvaDbMessageHnd mh, KvaDbAttributeHnd ah);
/**
* \ingroup kvadb_attributes
* Delete an attribute from a database.
*
* \param[in] dh A handle to a message
* \param[in] ah A handle to an attribute
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbAddAttribute()
*/
KvaDbStatus WINAPI kvaDbDeleteAttribute(KvaDbHnd dh, KvaDbAttributeHnd ah);
/**
* \ingroup kvadb_attributes
* Add an attribute to a signal.
*
* \param[in] sh A handle to a signal
* \param[in] adh A handle to an attribute definition
* \param[out] ah An attribute handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbDeleteSignalAttribute()
*/
KvaDbStatus WINAPI kvaDbAddSignalAttribute(KvaDbSignalHnd sh, KvaDbAttributeDefHnd adh, KvaDbAttributeHnd *ah);
/**
* \ingroup kvadb_signals
* Get the first enumeration value in a signal.
*
* \param[in] sh A signal handle
* \param[out] eh A handle to the first enumeration value
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetNextEnumValue()
*/
KvaDbStatus WINAPI kvaDbGetFirstEnumValue(KvaDbSignalHnd sh, KvaDbEnumValueHnd *eh);
/**
* \ingroup kvadb_signals
* Get the next enumeration value in a signal. Should be called after
* \ref kvaDbGetFirstEnumValue().
*
* \param[in] sh A signal handle
* \param[out] eh A handle to the next enumeration value
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetNextEnumValue
*/
KvaDbStatus WINAPI kvaDbGetNextEnumValue(KvaDbSignalHnd sh, KvaDbEnumValueHnd *eh);
/**
* \ingroup kvadb_signals
*
* Get the enumeration value and name.
* The name is returned as a null-terminated string.
* If \a buf is to small, the name will be truncated and status will be kvaDbOK.
*
* \param[in] eh An enumeration value handle
* \param[out] val The enumeration value
* \param[out] buf The buffer that will hold the enumeration name
* \param[in] buflen The length of the buffer
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbGetFirstEnumValue()
*/
KvaDbStatus WINAPI kvaDbGetEnumValue(KvaDbEnumValueHnd eh, int *val, char *buf, size_t buflen);
/**
* \ingroup kvadb_signals
*
* Get the enumeration value and name for the first enumeration value for a signal.
* The name is returned as a null-terminated string.
* If \a buf is to small, the name will be truncated and status will be kvaDbOK.
*
* \param[in] sh A signal handle.
* \param[out] eh An enumeration value handle.
* \param[out] val The enumeration value.
* \param[out] buf The buffer that will hold the enumeration name.
* \param[in] buflen The length of the buffer.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
*/
KvaDbStatus WINAPI kvaDbGetFirstEnumValuePair(KvaDbSignalHnd sh, KvaDbEnumValueHnd *eh, int *val, char *buf, size_t buflen);
/**
* \ingroup kvadb_signals
*
* Get the enumeration value and name for the next enumeration value for a signal.
* The name is returned as a null-terminated string.
* If \a buf is to small, the name will be truncated and status will be kvaDbOK.
* Should be called after \ref kvaDbGetFirstEnumValuePair().
*
* \param[in] sh A signal handle.
* \param[out] eh An enumeration value handle.
* \param[out] val The enumeration value.
* \param[out] buf The buffer that will hold the enumeration name.
* \param[in] buflen The length of the buffer.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
*/
KvaDbStatus WINAPI kvaDbGetNextEnumValuePair(KvaDbSignalHnd sh, KvaDbEnumValueHnd *eh, int *val, char *buf, size_t buflen);
/**
* \ingroup kvadb_signals
* Add a new enumeration value to a signal.
*
* \param[in] sh A signal handle
* \param[out] val The enumeration value
* \param[out] name The enumeration name
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbDeleteEnumValue()
*/
KvaDbStatus WINAPI kvaDbAddEnumValue(KvaDbSignalHnd sh, int val, const char* name);
/**
* \ingroup kvadb_signals
* Delete an enumeration value from a signal.
*
* \param[in] sh A signal handle
* \param[in] eh An enumeration value handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa \ref kvaDbAddEnumValue()
*/
KvaDbStatus WINAPI kvaDbDeleteEnumValue(KvaDbSignalHnd sh, KvaDbEnumValueHnd eh);
/**
* \ingroup kvadb_attributes
* Delete an attribute from a signal.
*
* \param[in] sh A handle to a signal
* \param[in] ah A handle to an attribute
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbAddSignalAttribute()
*/
KvaDbStatus WINAPI kvaDbDeleteSignalAttribute(KvaDbSignalHnd sh, KvaDbAttributeHnd ah);
/**
* \ingroup kvadb_attributes
* Add an attribute to a node.
*
* \param[in] nh A handle to a node
* \param[in] adh A handle to an attribute definition
* \param[out] ah An attribute handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbDeleteNodeAttribute()
*/
KvaDbStatus WINAPI kvaDbAddNodeAttribute(KvaDbNodeHnd nh, KvaDbAttributeDefHnd adh, KvaDbAttributeHnd *ah);
/**
* \ingroup kvadb_attributes
* Delete an attribute from a node.
*
* \param[in] nh A handle to a node
* \param[in] ah A handle to an attribute
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbAddNodeAttribute()
*/
KvaDbStatus WINAPI kvaDbDeleteNodeAttribute(KvaDbNodeHnd nh, KvaDbAttributeHnd ah);
/**
* \ingroup kvadb_attributes
* Get a handle to the first attribute for a message.
*
* \param[in] mh A handle to a message
* \param[out] ah An attribute definition handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetNextAttribute()
*/
KvaDbStatus WINAPI kvaDbGetFirstMsgAttribute(KvaDbMessageHnd mh, KvaDbAttributeHnd *ah);
/**
* \ingroup kvadb_attributes
* Get a handle to an attribute with specified name for a message.
*
* \param[in] mh A handle to a message
* \param[in] attrName The attribute name to search for
* \param[out] ah An attribute definition handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetMsgAttributeByName(KvaDbMessageHnd mh, const char *attrName, KvaDbAttributeHnd *ah);
/**
* \ingroup kvadb_attributes
* Get a handle to an attribute with specified name for a database.
*
* \param[in] dh A handle to a database
* \param[in] attrName The attribute name to search for
* \param[out] ah An attribute definition handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetAttributeByName(KvaDbHnd dh, const char *attrName, KvaDbAttributeHnd *ah);
/**
* \ingroup kvadb_attributes
* Get a handle to the first attribute for a signal.
*
* \param[in] sh A handle to a signal
* \param[out] ah An attribute handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetNextAttribute()
*/
KvaDbStatus WINAPI kvaDbGetFirstSignalAttribute(KvaDbSignalHnd sh, KvaDbAttributeHnd *ah);
/**
* \ingroup kvadb_attributes
* Get a handle to an attribute with specified name for a signal.
*
* \param[in] sh A handle to a signal
* \param[in] attrName The attribute name to search for
* \param[out] ah An attribute definition handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetSignalAttributeByName(KvaDbSignalHnd sh, const char *attrName, KvaDbAttributeHnd *ah);
/**
* \ingroup kvadb_attributes
* Get a handle to the first attribute for a node.
*
* \param[in] nh A handle to a node
* \param[out] ah An attribute definition handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetNextAttribute()
*/
KvaDbStatus WINAPI kvaDbGetFirstNodeAttribute(KvaDbNodeHnd nh, KvaDbAttributeHnd *ah);
/**
* \ingroup kvadb_attributes
* Get a handle to an attribute with specified name for a node.
*
* \param[in] nh A handle to a node
* \param[in] attrName The attribute name to search for
* \param[out] ah An attribute definition handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*/
KvaDbStatus WINAPI kvaDbGetNodeAttributeByName(KvaDbNodeHnd nh, const char *attrName, KvaDbAttributeHnd *ah);
/**
* \ingroup kvadb_attributes
* Get a handle to the first attribute for a database
*
* \param[in] dh A handle to an database
* \param[out] nah An attribute handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
*/
KvaDbStatus WINAPI kvaDbGetFirstAttribute(KvaDbHnd dh, KvaDbAttributeHnd *nah);
/**
* \ingroup kvadb_attributes
* Get a handle to the following attribute.
*
* \param[in] ah A handle to an attribute
* \param[out] nah An attribute handle
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetFirstAttribute()
* \sa kvaDbGetFirstMsgAttribute()
* \sa kvaDbGetFirstSignalAttribute()
* \sa kvaDbGetFirstNodeAttribute()
*/
KvaDbStatus WINAPI kvaDbGetNextAttribute(KvaDbAttributeHnd ah, KvaDbAttributeHnd *nah);
/**
* \ingroup kvadb_attributes
* Get the type for an attribute.
*
* \param[in] ah A handle to an attribute
* \param[out] at The type of the attribute
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetAttributeName()
*/
KvaDbStatus WINAPI kvaDbGetAttributeType(KvaDbAttributeHnd ah, KvaDbAttributeType *at);
/**
* \ingroup kvadb_attributes
*
* Get the name of an attribute as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] ah A handle to an attribute
* \param[out] buf The buffer that will hold the attribute name
* \param[in] buflen The length of the buffer.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetAttributeType()
*/
KvaDbStatus WINAPI kvaDbGetAttributeName(KvaDbAttributeHnd ah, char *buf, size_t buflen);
/**
* \ingroup kvadb_attributes
* Set the value for an attribute of type integer.
*
* \param[in] ah A handle to an attribute
* \param[in] val The value to set
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetAttributeValueInt()
*/
KvaDbStatus WINAPI kvaDbSetAttributeValueInt(KvaDbAttributeHnd ah, int val);
/**
* \ingroup kvadb_attributes
* Get the value for an attribute of type integer.
*
* \param[in] ah A handle to an attribute
* \param[out] val The value of the attribute
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbSetAttributeValueInt()
*/
KvaDbStatus WINAPI kvaDbGetAttributeValueInt(KvaDbAttributeHnd ah, int *val);
/**
* \ingroup kvadb_attributes
* Set the value for an attribute of type float.
*
* \param[in] ah A handle to an attribute
* \param[in] val The value to set
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetAttributeValueFloat()
*/
KvaDbStatus WINAPI kvaDbSetAttributeValueFloat(KvaDbAttributeHnd ah, float val);
/**
* \ingroup kvadb_attributes
* Get the value for an attribute of type float.
*
* \param[in] ah A handle to an attribute
* \param[out] val The value of the attribute
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbSetAttributeValueFloat()
*/
KvaDbStatus WINAPI kvaDbGetAttributeValueFloat(KvaDbAttributeHnd ah, float *val);
/**
* \ingroup kvadb_attributes
* Set the value for an attribute of type string.
*
* \param[in] ah A handle to an attribute
* \param[in] buf The buffer that holds the attribute value
* \param[in] buflen The length of the buffer.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetAttributeValueString()
*/
KvaDbStatus WINAPI kvaDbSetAttributeValueString(KvaDbAttributeHnd ah, const char *buf, int buflen);
/**
* \ingroup kvadb_attributes
*
* Get the value for an attribute of type string as a null-terminated string.
* A truncated string will be returned if \a buf is too small and status will be kvaDbOK.
*
* \param[in] ah A handle to an attribute
* \param[out] buf The buffer that holds the attribute value
* \param[out] buflen The length of the buffer.
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbSetAttributeValueString()
*/
KvaDbStatus WINAPI kvaDbGetAttributeValueString(KvaDbAttributeHnd ah, char *buf, size_t buflen);
/**
* \ingroup kvadb_attributes
* Set the value for an attribute of type enumeration.
*
* \param[in] ah A handle to an attribute
* \param[in] val The value to set
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetAttributeValueEnumeration()
*/
KvaDbStatus WINAPI kvaDbSetAttributeValueEnumeration(KvaDbAttributeHnd ah, int val);
/**
* \ingroup kvadb_attributes
* Get the value for an attribute of type enumeration.
*
* \param[in] ah A handle to an attribute
* \param[out] val The value of the attribute
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbSetAttributeValueEnumeration()
*/
KvaDbStatus WINAPI kvaDbGetAttributeValueEnumeration(KvaDbAttributeHnd ah, int *val);
/**
* \ingroup kvadb_messages
* Translates message dlc to number of bytes for a given protocol
*
* \param[in] prot A protocol type
* \param[in] dlc Raw message dlc
* \param[out] numBytes Number of bytes
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetProtocol()
*/
KvaDbStatus WINAPI kvaDbMsgDlcToBytes(KvaDbProtocolType prot, unsigned int dlc, unsigned int *numBytes);
/**
* \ingroup kvadb_messages
* Translates number of bytes to message dlc for a given protocol
*
* \param[in] prot A protocol type
* \param[in] numBytes Number of bytes
* \param[out] dlc Raw message dlc
*
* \return \ref kvaDbOK (zero) if success
* \return \ref kvaDbErr_xxx (negative) if failure
*
* \sa kvaDbGetProtocol()
*/
KvaDbStatus WINAPI kvaDbBytesToMsgDlc(KvaDbProtocolType prot, unsigned int numBytes, unsigned int *dlc);
/**
* \page page_kvadblib Database API (kvaDbLib)
*
* \tableofcontents
*
*
* The database library kvaDbLib is used for creating, reading, writing and
* modifying CAN databases that holds descriptions of packages that is received
* or sent on the CAN network.
*
* A CAN database contains information about messages. Each message has (among
* other attributes) an identifier, a name and one or several signals. The
* kvaDbLib library is an API for these CAN databases.
*
* - \subpage page_kvadblib_user_guide_intro
* - \subpage page_kvadblib_example_load_database
* - \subpage page_user_guide_kvadblib_samples
*
* For more details, see the module \ref grp_kvadb.
*/
#ifdef __cplusplus
}
#endif
#endif //KVADBLIB_H