#ifndef BABYLIN_H #define BABYLIN_H #include "BabyLINCAN_types.h" #if defined(__cplusplus) #include // get "size_t", used by function BL_encodeSignal()) #include extern "C" { #else #include // get "size_t", used by function BL_encodeSignal()) #include #endif /** @brief Registers a callback function, which is called on every reception of a (monitored) jumbo * frame. * * @deprecated Use @ref BLC_registerUserDataJumboFrameCallback instead * * Issuing a NULL-pointer de-registers the callback function. As the function is called from another * thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel id which the frame occurred * @param[in] callback Pointer to a function call-compatible to @ref BLC_jumboframe_callback_func. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) BLC_getLastError. */ int BL_DLLIMPORT BLC_registerJumboFrameCallback(BL_HANDLE handle, BLC_jumboframe_callback_func* callback); /** @brief Registers a callback function, which is called on every reception of a (monitored) frame. * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel id which the frame occurred * @param[in] callback Pointer to a function call-compatible to @ref BLC_frame_callback_func. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerFrameCallback(BL_HANDLE handle, BLC_frame_callback_func* callback); /** @brief Registers a callback function, which is called on every reception of a monitored signal. * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel on which the signal occurred; * @param[in] callback Pointer to a function call-compatible to @ref BLC_signal_callback_func. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerSignalCallback(BL_HANDLE handle, BLC_signal_callback_func* callback); /** @brief Registers a callback function, which is called on every reception of an error message * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel emitting the error; returned previously by * @param[in] callback Pointer to a function call-compatible to @ref BLC_error_callback_func. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerErrorCallback(BL_HANDLE handle, BLC_error_callback_func* callback); /** @brief Registers a callback function, which is called whenever the execution * state of a macro changes * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel emitting the error; returned previously by * @param[in] callback Pointer to a function call-compatible to @ref BLC_macrostate_callback_func. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerMacroStateCallback(BL_HANDLE handle, BLC_macrostate_callback_func* callback); /** @brief Registers a callback function, which is called whenever a debug message from a * BabyLIN-Device is received * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel emitting the error; returned previously by * @param[in] callback Pointer to a function call-compatible to @ref BLC_debug_callback_func. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerDebugCallback(BL_HANDLE handle, BLC_debug_callback_func* callback); /** @brief Registers a callback function, which is called whenever dtl request is received * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel emitting the error; returned previously by * @param[in] callback Pointer to a function call-compatible to @ref * BLC_dtl_request_callback_func. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerDTLRequestCallback(BL_HANDLE handle, BLC_dtl_request_callback_func* callback); /** @brief Registers a callback function, which is called whenever dtl response is received * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel emitting the error; returned previously by * @param[in] callback Pointer to a function call-compatible to @ref * BLC_dtl_response_callback_func. * @return Status of operation; '=0' means successful, '!=0' otherwise. * See standard return values for error, or for textual representation (for * return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerDTLResponseCallback(BL_HANDLE handle, BLC_dtl_response_callback_func* callback); /** @brief Registers a callback function, which is called on every reception of * a (monitored) jumbo frame. * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel id which the frame occurred * @param[in] callback Pointer to a function call-compatible to @ref * BLC_jumboframe_callback_func_ptr. * @param[in] userdata Pointer to custom user data to pass to @ref * BLC_jumboframe_callback_func_ptr. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) BLC_getLastError. */ int BL_DLLIMPORT BLC_registerUserDataJumboFrameCallback(BL_HANDLE handle, BLC_jumboframe_callback_func_ptr* callback, void* userdata); /** @brief Registers a callback function, which is called on every reception of * a (monitored) frame. * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel id which the frame occurred * @param[in] callback Pointer to a function call-compatible to @ref BLC_frame_callback_func_ptr. * @param[in] userdata Pointer to custom user data to pass to @ref BLC_frame_callback_func_ptr. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerUserDataFrameCallback(BL_HANDLE handle, BLC_frame_callback_func_ptr* callback, void* userdata); /** @brief Registers a callback function, which is called on every reception of an event report. * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel id which the event occurred * @param[in] callback Pointer to a function call-compatible to @ref BLC_event_callback_func_ptr. * @param[in] userdata Pointer to custom user data to pass to @ref BLC_event_callback_func_ptr. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerUserDataEvent(BL_HANDLE handle, BLC_event_callback_func_ptr* callback, void* userdata); /** @brief Alias for BLC_registerUserDataEvent */ int BL_DLLIMPORT BLC_registerUserDataEventCallback(BL_HANDLE handle, BLC_event_callback_func_ptr* callback, void* userdata); /** @brief Alias for BLC_registerUserDataEvent without user data */ int BL_DLLIMPORT BLC_registerEventCallback(BL_HANDLE handle, BLC_event_callback_func* callback); /** @brief Registers a callback function, which is called on every reception of a monitored signal. * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel on which the signal occurred; * @param[in] callback Pointer to a function call-compatible to @ref BLC_signal_callback_func_ptr. * @param[in] userdata Pointer to custom user data to pass to @ref BLC_signal_callback_func_ptr. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerUserDataSignalCallback(BL_HANDLE handle, BLC_signal_callback_func_ptr* callback, void* userdata); /** @brief Registers a callback function, which is called on every reception of an error message * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel emitting the error; returned previously by * @param[in] callback Pointer to a function call-compatible to @ref BLC_error_callback_func_ptr. * @param[in] userdata Pointer to custom user data to pass to @ref BLC_error_callback_func_ptr. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerUserDataErrorCallback(BL_HANDLE handle, BLC_error_callback_func_ptr* callback, void* userdata); /** @brief Registers a callback function, which is called whenever the execution state of a macro * changes * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel emitting the error; returned previously by * @param[in] callback Pointer to a function call-compatible to @ref * BLC_macrostate_callback_func_ptr. * @param[in] userdata Pointer to custom user data to pass to @ref BLC_error_callback_func_ptr. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerUserDataMacroStateCallback(BL_HANDLE handle, BLC_macrostate_callback_func_ptr* callback, void* userdata); /** @brief Registers a callback function, which is called whenever a debug message from a * BabyLIN-Device is received * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel emitting the error; returned previously by * @param[in] callback Pointer to a function call-compatible to @ref BLC_debug_callback_func_ptr. * @param[in] userdata Pointer to custom user data to pass to @ref BLC_error_callback_func_ptr. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerUserDataDebugCallback(BL_HANDLE handle, BLC_debug_callback_func_ptr* callback, void* userdata); /** @brief Registers a callback function, which is called whenever dtl request is received * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel emitting the error; returned previously by * @param[in] callback Pointer to a function call-compatible to @ref * BLC_dtl_request_callback_func_ptr. * @param[in] userdata Pointer to custom user data to pass to @ref BLC_error_callback_func_ptr. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerUserDataDTLRequestCallback(BL_HANDLE handle, BLC_dtl_request_callback_func_ptr* callback, void* userdata); /** @brief Registers a callback function, which is called whenever dtl response is received * * Issuing a NULL-pointer de-registers the callback function. As the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param[in] handle Handle representing the channel emitting the error; returned previously by * @param[in] callback Pointer to a function call-compatible to @ref * BLC_dtl_request_callback_func_ptr. * @param[in] userdata Pointer to custom user data to pass to @ref BLC_error_callback_func_ptr. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_registerUserDataDTLResponseCallback(BL_HANDLE handle, BLC_dtl_response_callback_func_ptr* callback, void* userdata); /** * @brief Registers a callback that will be called when the lua "print" function is called. * *Registers a callback that will be called when the lua "print" function is called. *@param[in] handle The connection for the callback *@param[in] func The function to be called as callback. *@param[in] userdata Any user supplied data, which will be available in the callback (e.g as * connection or channel handle) */ int BL_DLLIMPORT BLC_registerLuaPrintCallback(BL_HANDLE handle, BLC_lua_print_func_ptr* func, void* userdata); /** * @brief Registers a callback that will be called on any LUA engine error. You can register this *callback to debug your script SDFs. * *Registers a callback that will be called on any LUA engine error. You can register this callback *to debug your script SDFs. *@param[in] handle The connection for the callback *@param[in] func The function to be called as callback. *@param[in] userdata Any user supplied data, which will be available in the callback (e.g as * connection or channel handle) */ int BL_DLLIMPORT BLC_registerLuaErrorCallback(BL_HANDLE handle, BLC_lua_print_func_ptr* func, void* userdata); /** @brief Registers a callback function, which is called whenever a log message is received * * Issuing a NULL-pointer de-registers the callback function. Since the function is called * from another thread context, take care of thread-safety (i.e. using mutexes, etc.). * @param handle Handle representing the channel the callback for logs must be registered to * @param callback Pointer to a function call-compatible to @ref BLC_log_callback_func_ptr. * @param userdata Pointer to custom user data to pass to @ref BLC_log_callback_func_ptr. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard return * values for error, or for textual representation (for return values < -1000) * BLC_getLastError. */ int BL_DLLIMPORT BLC_registerUserDataLogCallback(BL_HANDLE handle, BLC_log_callback_func_ptr* callback, void* userdata); /** @}*/ //////////////////////////////////////////////////////////////////////////////// /** @}*/ /** @addtogroup connection_handling Connection Handling * @brief List of BabyLIN connection handling and device information functions * * The following functions are used to setup a connection to a BabyLIN device. * @{ */ /** @brief Get the major and minor version number of the library * * @deprecated Use @ref BLC_getExtendedVersion instead * * This function retrieves the version in the given parameter variables of the library. * @param[out] major Major part of version number. * @param[out] minor Minor part of version number. */ void BL_DLLIMPORT BLC_getVersion(int* major, int* minor); /** @brief Get the major, minor and patch version number of the library * * This function retrieves the version in the given parameter variables of the library. * @param[out] major Major part of version number. * @param[out] minor Minor part of version number. * @param[out] patch Patch part of version number. * @param[out] buildrev Build revision of version number. */ void BL_DLLIMPORT BLC_getExtendedVersion(int* major, int* minor, int* patch, int* buildrev); /** @brief Get the version string of the library * * This function returns the version string of the library. * @return Returns a C-string with the version information. */ CPCHAR BL_DLLIMPORT BLC_getVersionString(void); /** @brief Retrieve a list of ports a BabyLIN is connected to * * The function doesn't try to connect to the found Ports wraps @ref BLC_getBabyLinPortsTimout with timout value set to 0ms. This function will not find any network-devices. * * @param[out] portListToBeFilled Preallocated array to be filled * @param[in,out] pFoundPortCount Input the size of the allocated array. Output the filled size of * the array. * @return The number of connected BabyLINs found (>=0) or < 0 on error * * * example: @code{.c} * BLC_PORTINFO ports[2]; int maxPortCount = 2; * int foundCount = BLC_getBabyLinPorts(ports, &maxPortCount); int foundEmpty = BLC_getBabyLinPorts(NULL, NULL); // if there were 3 BabyLin connected to usb: // foundCount == 2 // foundEmpty == 3 //if there is only 1 Babylin connected: foundCount = BLC_getBabyLinPorts(ports, &maxPortCount); foundEmpty = BLC_getBabyLinPorts(NULL, NULL); //foundEmpty == 1; //foundCount == 1; @endcode * */ int BL_DLLIMPORT BLC_getBabyLinPorts(BLC_PORTINFO portListToBeFilled[], int* pFoundPortCount); /** @brief Retrieve a list of ports a BabyLIN is connected to * * The function doesn't try to connect to the found Ports. You can not connect to UDP network * devices they are only listed FYI and have to be configured in SimpleMenu mode first. Network * devices of type TCP will have the default Port configured(2048) for connection. If the Device's * simplemenu-tcp-com-port configuration value was changed. you will have to change the * BLC_PORTINFO.port prior to connecting via BLC_openPort(...). * @param[out] portListToBeFilled Array to be filled * @param[in,out] pFoundPortCount Input the size of the allocated array. Output the filled size of * the array. * @param timoutms A timeout value in ms to wait for replies of network devices. If * timoutms is set to <= 0 this Function will not find/look for any * Network devices. * @return The number of connected BabyLINs found (>=0) or < 0 on error */ int BL_DLLIMPORT BLC_getBabyLinPortsTimout(BLC_PORTINFO portListToBeFilled[], int* pFoundPortCount, int timoutms); /** @brief Open a connection to a BabyLIN USB-Serial device. * * This function tries to open the designated port and to start communication with the device. * @param port The port, the BabyLIN is connected to. It uses Windows-style numbering, which means * it starts with '1' for the first serial port. '0' is reserved. On linux systems, the * port is represented by the path to the device file ("/dev/ttyUSB0" f.ex.) * @return Returns an handle for the BabyLIN-connection or NULL if the connection could not be * established. You may fetch the corresponding (textual) error with @ref * BLC_getLastError. * @deprecated use @ref BLC_openPort() together with @ref BLC_convertUrl() or @ref * BLC_getBabyLinPorts() */ #if defined(_WIN32) BL_HANDLE BL_DLLIMPORT BLC_open(unsigned int port); #else BL_HANDLE BL_DLLIMPORT BLC_open(const char* port); #endif /** @brief Open a connection to a BabyLIN device using ethernet. * * This function tries to open the designated ip and port and to start communication with the * device. * @param[in] ip The ip-address of the BabyLIN to connect to * @param port The ip-port of the BabyLIN toconnected to * @return Returns an handle for the BabyLIN-connection or NULL if the connection could not * be established. You may fetch the corresponding (textual) error with @ref * BLC_getLastError. * @deprecated use @ref BLC_openPort() together with @ref BLC_convertUrl() or @ref * BLC_getBabyLinPorts() */ BL_HANDLE BL_DLLIMPORT BLC_openNet(const char* ip, int port); /** @brief Open a connection to a BabyLIN USB device. * * This function tries to open the designated port and to start communication with the device. * @param[in] device The usb device string, the BabyLIN is connected to. * @return Returns an handle for the BabyLIN-connection or NULL if the connection could * not be established. You may fetch the corresponding (textual) error with @ref * BLC_getLastError. * @deprecated use @ref BLC_openPort() together with @ref BLC_convertUrl() */ BL_HANDLE BL_DLLIMPORT BLC_openUSB(const char* device); /** @brief Open a connection to a BabyLIN device using @ref BLC_PORTINFO information. * * This function tries to open the BabyLIN device of the @ref BLC_PORTINFO information, i.e. works * as a wrapper for @ref BLC_open and @ref BLC_openNet which automatically decides which connection * to establish. * * @note Platform independent way of connecting to BabyLIN-devices found by @ref BLC_getBabyLinPorts * or @ref BLC_getBabyLinPortsTimout * * @param portInfo The @ref BLC_PORTINFO-structure of the BabyLIN to connect to ( see @ref * BLC_getBabyLinPorts ) * @return Returns an handle for the BabyLIN-connection or NULL if the connection could not * be established. You may fetch the corresponding (textual) error with @ref * BLC_getLastError. */ BL_HANDLE BL_DLLIMPORT BLC_openPort(BLC_PORTINFO portInfo); /** @brief convert a device url to @ref BLC_PORTINFO to use in @ref BLC_openPort * * this function tries to convert a given url to a complete struct of type @ref BLC_PORTINFO. * * The device url defines the device and protocol: * serial://1 Opens a USB connection on Windows using the BabyLIN library protocol. * serial:///dev/ttyUSB1 Opens a USB connection on Linux using the BabyLIN library protocol. * tcp://127.0.0.1:2048 Opens a network connection to a Baby-LIN-MB-II using the BabyLIN library * protocol of the SimpleMenu mode. ascii://127.0.0.1:10003 Opens a network connection to a * Baby-LIN-MB-II using the ASCII protocol of the StandAlone mode. * * Note: While using only a port number does work under Linux, it is not recommended to use it. * It will only work for old devices that are listed as "ttyUSB" devices. Newer devices * will be listed as "ttyACM" and will require the full path to the device, as it is * ambiguous which device is meant otherwise. * * @param[in] url The device url to convert might be a system path (serial:///dev/ttyUSB1) for * unix based systems, a comport number (serial://1) as is used for windows or * a network address (tcp://127.0.0.1:2048) to connect to a network device. The * ASCII protocol of Baby-LIN-MB-II is supported as well * (ascii://127.0.0.1:10003). Additionally, there exist a special shortcut for * serial:://1 resp. serial:///dev/ttyUSB1 consisting of the single port number * [COM]1. Thus, if an integer is given as a port number (started by an * optional COM, e.g. COM1), then the protocol is set to BabyLIN library * protocol (serial). * @param[out] portInfo The @ref BLC_PORTINFO struct to fill. * @return @ref BL_OK on success, error code otherwise (in case of error, the * @ref BLC_PORTINFO structure is left untouched) */ int BL_DLLIMPORT BLC_convertUrl(const char* url, BLC_PORTINFO* portInfo); /** @brief Close connection to Device. * * close an open connection, given by handle. * @param[in] handle Handle representing the connection ( see @ref BLC_open ) * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_close(BL_HANDLE handle); /** @brief Close ALL connections to ALL Devices. * * Close all open connections; all handles are invalidated. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard return values * for error, or for textual representation @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_closeAll(void); /** @brief Reset the BabyLIN device to an consistent and deactivated state. * * Afterwards, the device will no longer monitor the bus, neither acting as slave nor as master. * @param[in] handle Handle representing a channel; returned previously by @ref * BLC_getChannelHandle(). * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_flush(BL_HANDLE handle); /** @brief Requests the information about the target * * @param[in] handle Handle representing the connection (see @ref BLC_open ) * @param[out] targetID Pointer to pre-allocated @ref BLC_TARGETID structure to hold the * information after the successful call * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getTargetID(BL_HANDLE handle, BLC_TARGETID* targetID); /** @brief Returns the unique hardware type identifier for a device * * @param[in] handle Handle representing the connection ( see @ref BLC_open ) The hardware type * or BabyLIN-error return code. See (@ref BLC_TARGETID.type) for hardware types. See standard * return values for error, or for textual representation (for return values < -1000) @ref * BLC_getLastError. */ int BL_DLLIMPORT BLC_getHWType(BL_HANDLE handle); /** @brief number of channels provided by the BabyLIN-Device * * @param[in] handle Handle representing the connection (see @ref BLC_open) * @return Number of channels >= 0 or < 0 on error. See standard return values for error, * or for textual representation (for return values < -1000) @ref * BLC_getLastError. */ int BL_DLLIMPORT BLC_getChannelCount(BL_HANDLE handle); /** @brief Retrieve a handle to the specified channel * * This function returns a channel-handle for the specified channelId. A channel-handle is used to * control a LIN- or CAN-BUS on the BabyLIN-device. * * @param[in] handle Handle representing the Device connection ( see @ref BLC_open ) * @param channelId Identifier for the channel to get the handle of. Ranges from 0 to the number * of channels supported by the device (see @ref BLC_getChannelCount) * @return Handle to the channel, 0 on error. You may fetch the corresponding (textual) * with @ref BLC_getLastError. */ BL_HANDLE BL_DLLIMPORT BLC_getChannelHandle(BL_HANDLE handle, int channelId); /** @brief Retrieve informations about the Channel * * @param[in] handle Channelhandle representing the Channel. (see @ref BLC_getChannelHandle) * @param[out] pinfo Pointer to pre-allocated @ref BLC_CHANNELINFO structure to hold the * information after the successful call * @return Status of operation; '=0' means successful, '!=0' otherwise. * See standard return values for error, or for textual * representation (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getChannelInfo(BL_HANDLE handle, BLC_CHANNELINFO* pinfo); /** @brief Returns a C-string with the textual representation of the last error. * * Get a textual error message for Errorcodes < -1000. * * @deprecated use @ref BLC_getDetailedErrorString() instead * * @param[in] handle Handle to the erroneous connection or channel. * @param[out] pErrorBuffer Pointer to allocated memory buffer to store error message * @param bufferLength Allocated length of pErrorBuffer * @return Status of operation; '=0' means successful, '!=0' otherwise. See * standard return values for error, or for textual representation (for * return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getLastError(BL_HANDLE handle, char* pErrorBuffer, int bufferLength); /** @brief Returns a C-string with the textual representation of an error code * * Get a textual error message for an error code. * * @deprecated use @ref BLC_getDetailedErrorString() instead */ CPCHAR BL_DLLIMPORT BLC_getErrorString(int error_code); /** * @brief Returns a C-string with the detailed textual representation of all possible error codes. * Get a detailed textual error message for an error code. * @param errorCode The error code. * @param reportParameter If the error code comes from an event or error report, pass the * additional data/status value. Otherwise just pass 0. * @param[out] pErrorBuffer A buffer with enough space. * @param bufferLength The length of the passed buffer * @return BL_BUFFER_TOO_SMALL If the buffer is too small, otherwise the number of sources. */ int BL_DLLIMPORT BLC_getDetailedErrorString(int errorCode, int reportParameter, char* pErrorBuffer, int bufferLength); /** @brief Resets the BabyLIN device to an consistent and deactivated state. * * Afterwards, the device will no longer monitor the bus, neither acting as slave nor as master. * @param[in] handle Handle representing the connection. (see @ref BLC_open ) * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_Reset(BL_HANDLE handle); /** @}*/ /** @addtogroup sdf_handling * @brief List of functions to get information about the loaded SDF * * The following functions are used to retrieve information about the elements in a loaded * SDF-file. * @{ */ /** @brief Loads the specified SDF-file into library and optionally the BabyLIN device. * * The SDF is generated by LINWorks/SessionConf from a LDF file. * @attention This resets the device upon download * * @param[in] handle Handle representing the connection. (see @ref BLC_open ) * @param[in] filename C-string with the (fully qualified) filename (i.e. "mybus.sdf", if in the * same directory, or "c:/data/mybus.sdf"). * @param download Boolean value, determines if the SDF profile gets downloaded into the * BabyLIN device (!=0) or only used in the library (=0). * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_loadSDF(BL_HANDLE handle, const char* filename, int download); /** @brief Loads the specified LDFile into library and optionally the BabyLIN device. * * Loads a given LDF, converts the LDF to a SDF ( without SDF specific features ) and optionally * downloads the generated SDF to the device. To actually use the LDF, you almost always need to set * the emulated node too. You can do this by using the "setnodesimu" command using @ref * BLC_sendCommand. * @attention This resets the device upon download * * @param[in] handle Handle representing the connection. (see @ref BLC_open ) * @param[in] filename C-string with the (fully qualified) filename (i.e. "mybus.ldf", if in the * same directory, or "c:/data/mybus.ldf"). * @param download Boolean value, determines if the generated SDF profile gets downloaded into * the BabyLIN device (!=0) or only used in the library (=0). * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_loadLDF(BL_HANDLE handle, const char* filename, int download); /** @brief Loads the previously loaded SDF-file into the BabyLIN device. * * The SDF could be generated by LINWorks/SessionConf from a LDF file and must * have been loaded previously by an BL_loadSDF() command. * WARNING: this resets the device! * @param[in] handle Handle representing the connection. (see @ref BLC_open ) * @param mode The mode to load the SDF. 0= don't load ; 1= download without check ; 2= * download only if the CRC of the loaded SDF is different * @return Status of operation; '=0' means successful, '!=0' otherwise. * See standard return values for error, or for textual * representation (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_downloadSDF(BL_HANDLE handle, int mode); /** @brief Checks whether the given file is already loaded on a device. * * If the device already has an SDF loaded, this method checks if the SDF at the given path and the * SDF on the device are the same. Important: This method only works with SDFv3 devices. * * @param[in] handle Handle representing the device. (see @ref BLC_open ) * @param[in] filename The path of the SDF to compare. * @return BL_OK = SDFs match * BL_SDF_INCOMPATIBLE = SDFs do not match * BL_NO_SDF = no SDF loaded on device * BL_SDF_INSUFFICIENT_FIRMWARE = the device does not support this feature. * e.g. a SDFv2 device. See standard return values for error, or for textual * representation (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_isSDFOnDevice(BL_HANDLE handle, const char* filename); /** @brief Retrieve further Information about a loaded SDF * * Need a loaded SDF (see @ref BLC_loadSDF or @ref BLC_loadLDF ) * @param[in] handle handle to a valid connection * @param[out] pSDFInfo Points to a pre-allocated @ref BLC_SDFINFO to be filled with information * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. * */ int BL_DLLIMPORT BLC_getSDFInfo(BL_HANDLE handle, BLC_SDFINFO* pSDFInfo); /** @brief Retrieve informations about a SDF-Section from a loaded SDF * * @param[in] handle Handle of a valid connection * @param infoAboutSectionNr The section number to retrieve information of. Ranges from 0 to the * number of sections in the loaded SDF (see @ref BLC_getSDFInfo and @ref * BLC_SDFINFO.sectionCount ) * @param[out] pSectionInfo Address of a pre-allocated @ref BLC_SECTIONINFO * @return Status of operation; '=0' means successful, '!=0' otherwise. See * standard return values for error, or for textual representation (for * return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getSectionInfo(BL_HANDLE handle, int infoAboutSectionNr, BLC_SECTIONINFO* pSectionInfo); /** @brief Retrieve description string of a SDF-Section from a loaded SDF * * @param[in] handle Handle of the channel to get the sdf section description of * @return * */ CPCHAR BL_DLLIMPORT BLC_getChannelSectionDescription(BL_HANDLE handle); /** @brief Returns the number of nodes on the BUS * * Number of nodes connected to the bus according to the informations in the loaded SDF. * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @return Number of nodes connected to the bus according to the informations in the * loaded SDF. Values <0 on error. See standard return values for error, or for * textual representation (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNodeCount(BL_HANDLE handle); /** @brief Returns the name of a given node * * Name of a node connected to the bus according to the informations in the loaded SDF. * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @param idx Zero based index of requested node entry (see @ref BLC_getNodeCount ) * @param[out] dstbuf Pointer to char array which gets filled (must hold min. 'buflen' bytes). * @param buflen How many bytes should get returned. * @return Status of operation; '>0' is the length of the string in "dstbuf", '<0' * otherwise. See standard return values for error, or for textual * representation (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNodeName(BL_HANDLE handle, int idx, char* dstbuf, int buflen); /** @brief Returns the number of frames of the BUS description * * Number of frames of the bus according to the informations in the loaded SDF. * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @return Number of frames of the bus according to the informations in the loaded SDF. * Values <0 on error. See standard return values for error, or for textual * representation (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getFrameCount(BL_HANDLE handle); /** @brief Returns the name of a given frame * * Name of a frame of the bus according to the informations in the loaded SDF. * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @param idx Zero based index of requested frame entry (see @ref BLC_getFrameCount ) * @param[out] dstbuf Pointer to char array which gets filled (must hold min. 'buflen' bytes). * @param buflen How many bytes should get returned. * @return Status of operation; '>=0' means successful and is the length of the frame * name, excluding the terminating '\0'. See standard return values for values * '<0', or for textual representation (for return values < -1000) @ref * BLC_getLastError. */ int BL_DLLIMPORT BLC_getFrameName(BL_HANDLE handle, int idx, char* dstbuf, int buflen); /** @brief Returns the number of signals * * Number of signals of the bus according to the informations in the loaded SDF. * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @return Number of signals of the bus according to the informations in the loaded SDF. * Values <0 on error. See standard return values for error, or for textual * representation (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getSignalCount(BL_HANDLE handle); /** @brief Returns the name of given signal * * Name of a signal of the bus according to the informations in the loaded SDF. * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @param idx Zero based index of requested signal entry (see @ref BLC_getSignalCount ) * @param[out] dstbuf Pointer to char array which gets filled (must hold min. 'buflen' bytes). * @param buflen How many bytes should get returned. * @return Status of operation; '>=0' means successful and is the length of the signal * name, excluding the terminating '\0'. See standard return values for values * '<0', or for textual representation (for return values < -1000) @ref * BLC_getLastError. */ int BL_DLLIMPORT BLC_getSignalName(BL_HANDLE handle, int idx, char* dstbuf, int buflen); /** @brief Retrieve information about wheather a signal is emulated by the BabyLIN-Device or not * * A signal is emulated if the node to which it belongs (according to the SDF) is emulated by the * BabyLIN-Device (see "setnodesimu" sendCommand in @ref babylin_commands_sdf to change node * emulation at runtime ) * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @param idx Zero based index of requested signal entry (see @ref BLC_getSignalCount ) * @return '=0' means signal is not emulated, '=1' if emulated, '<0' denotes error. * See standard return values for error, or for textual representation (for * return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_isSignalEmulated(BL_HANDLE handle, int idx); /** @brief Retrieve size of a signal * * Size of a signal of the bus according to the informations in the loaded SDF. * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @param idx Zero based index of requested signal entry (see @ref BLC_getSignalCount ) * @return Size of the signal in bits. Values <0 on error. See standard return values for * error, or for textual representation (for return values < -1000) @ref * BLC_getLastError. */ int BL_DLLIMPORT BLC_getSignalSize(BL_HANDLE handle, int idx); /** @brief Retrieve the number of signals mapped in a frame * * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @param idx Zero based index of requested frame entry (see @ref BLC_getFrameCount ) * @return Number of signals mapped in the frame Values <0 on error. See standard return * values for error, or for textual representation (for return values < -1000) * @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getSignalsInFrameCount(BL_HANDLE handle, int idx); /** @brief Retrieve the signal number of a signal mapped in a frame * * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @param frameIndex Zero based index of the frame the signal is mapped to (see @ref * BLC_getFrameCount ) * @param signalIndex Zero based index of the signal as mapped to the frame (see @ref * BLC_getSignalsInFrameCount ) * @return Zero based index of the signal in the SDF Values <0 on error. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getSignalInFrame(BL_HANDLE handle, int frameIndex, int signalIndex); /** @brief Retrieve the SDF frame number for a given BUS frame-id * * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @param frameId The BUS frameId to get the frame number. Special Bits that change the * interpretation of frameId: Bit 32(0x80000000) : the given Id is a 29Bit ID. * @return Zero based index of the frame in the SDF Values <0 on error. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getFrameNrForFrameId(BL_HANDLE handle, unsigned int frameId); /** @brief Retrieve the BUS frame-id for a given SDF frame number * * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @param frameNr Zero based index of the frame (see @ref BLC_getFrameCount ) * @return BUS frameId to the given frame index Values <0 on error. See standard return * values for error, or for textual representation (for return values < -1000) * @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getFrameIdForFrameNr(BL_HANDLE handle, unsigned char frameNr); /** @}*/ /** @addtogroup command_functions Command Functions * @brief List of functions to send commands to a BabyLIN device * * The following functions are used to send commands to a BabyLIN device to set or retrieve * simulation or device parameters. * @{ */ /** @brief Send a (raw!) command to the BabyLIN device. * * @attention The command must be encoded in the binary DP-Message format of BabyLIN. * * @param[in] handle Handle representing the connection. (see @ref BLC_open ) * @param[in] command Char*-Buffer with the designated @ref Commands * @param[in,out] length Input length of buffer. Output set to actual sent command's length. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) BL_getLastError(). */ int BL_DLLIMPORT BLC_sendRaw(BL_HANDLE handle, const unsigned char* command, unsigned int* length); /** @brief Set the Diagnostic Transport Layer mode. * * There are different Diagnostic modes, which offer different levels of protocol functionality. * The Baby-LIN will start with Diagnostic OFF on Power Up. If the BabyLIN acts as LIN master then * the selection of an Diagnostic Mode happens trough the usage of the appropriate API function * calls. So the API functions BL_sendRawMasterRequest or BL_sendRawSlaveResponse will start the * Diagnostic RAW mode, where as the API calls BL_sendDTLRequest or BL_sendDTLResponse will start * the Diagnostic DTL mode. If the BabyLIN acts as LIN slave then the DTL mode must be set by use of * this function. It is not possible to use different Diagnostics modes at the same time ! * * List of DTL modes: * | Mode | Name | Description | * |-----:|:-----|:------------| * |0 | DTL_NONE | no DTL Support | * |1 | DTL_RAW | RAW Mode DTL Support | * |2 | DTL_COOKED | Cooked Mode DTL Support | * * @param[in] handle Handle representing a LIN-channel (see @ref BLC_getChannelHandle ) * @param mode DTL mode * @return Status of operation; '=0' means successful, '!=0' otherwise. * See standard return values for error, or for textual representation (for * return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_setDTLMode(BL_HANDLE handle, int mode); /** @brief Send a DTL master request to a node * * @param[in] handle Handle representing a LIN-channel (see @ref BLC_getChannelHandle ) * @param nad NAD of the node the request gets send to. * @param length Length of the following data array. * @param[out] data DTL frame data (begins with SID, followed by up to 4095 data bytes). * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_sendDTLRequest(BL_HANDLE handle, unsigned char nad, int length, unsigned char* data); /** @brief Send a DTL slave response to a node * * @param[in] handle Handle representing a LIN-channel (see @ref BLC_getChannelHandle ) * @param nad NAD of the node the response gets send for. * @param length Length of the following data array. * @param[out] data DTL frame data (begins with RSID, followed by up to 4095 data bytes). * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) BL_getLastError(). */ int BL_DLLIMPORT BLC_sendDTLResponse(BL_HANDLE handle, unsigned char nad, int length, unsigned char* data); /** @brief Send a (non-DTL) slave response upon receive of matching master request * * Upon the reveive of the next master request frame, every bit of the request is compared to * 'reqdata' if the corresponding bit of 'reqmask' is set (1). If all match, Baby-LIN starts to send * out the data given in 'data', 8 bytes with each slave response frame. * * @param[in] handle Handle representing a LIN-channel (see @ref BLC_getChannelHandle ) * @param[in] reqdata Data of the expected master request (exactly 8 bytes). * @param[in] reqmask Mask for 'reqdata' to indicate which bits must match (exactly 8 bytes). * @param[out] data Slave response frame data (multiple of 8 bytes). * @param length Length of data to send. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_sendRawSlaveResponse(BL_HANDLE handle, unsigned char* reqdata, unsigned char* reqmask, unsigned char* data, int length); /** @brief Send a (non-DTL) Master request with the specified 8 bytes as data. * * The internal raw-SlaveResponse-buffer is being reset and the Baby-LIN device gets instructed to * report the next 'count' slave response frames which in turn are accumulated into the * slave response-buffer which can be queried by BL_getRawSlaveResponse(). * * @param[in] handle Handle representing a LIN-channel (see @ref BLC_getChannelHandle ) * @param[in] data Master request frame data (exactly 8 bytes). * @param count Number of expected slave response frames. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_sendRawMasterRequest(BL_HANDLE handle, unsigned char* data, int count); /** @brief Returns the status of the last request-send operation. * * @param[in] handle Handle representing a LIN-channel (see @ref BLC_getChannelHandle ) * @return Status of last request operation if >= 0; see @ref BL_DTL_STATUS for values. * For < 0, see standard return values for error, or for textual representation * (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getDTLRequestStatus(BL_HANDLE handle); /** @brief Returns the status of the last resonse-send operation. * * @param[in] handle Handle representing a LIN-channel (see @ref BLC_getChannelHandle ) * @return Status of last request operation if >= 0; see @ref BL_DTL_STATUS for values. * For < 0, see standard return values for error, or for textual representation * (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getDTLResponseStatus(BL_HANDLE handle); /** @brief Returns the first 'length' bytes of the current slave response-buffer. * * The internal raw-SlaveResponse-buffer is filled continuously with the data bytes of * reported SlaveResp-frames and is being reset upon every call of BL_sendRawMasterRequest(). * * @param[in] handle Handle representing a LIN-channel (see @ref BLC_getChannelHandle ) * @param[out] data Pointer to char array which gets filled (must hold min. 'length' bytes). * @param length How many bytes should get returned. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getRawSlaveResponse(BL_HANDLE handle, unsigned char* data, int length); /** * @brief BLC_updRawSlaveResponse resets the internal dtl buffer. * * @param[in] handle Handle representing a LIN-channel (see @ref BLC_getChannelHandle ) * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_updRawSlaveResponse(BL_HANDLE handle); /** @brief Returns @ref BL_OK if the last answer to a command, send to the given handle, contained * additional data. * * If there is no additional data present it returns BL_NO_ANSWER_DATA. * @param[in] handle Handle representing the Channel (see @ref BLC_getChannelHandle ). * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_lastAnswerHasData(BL_HANDLE handle); /** @brief Get type of a parameter of the last answer data from a BabyLIN * * If the last answer to a command contained additional data, then this function reports the type * and size for a specific answer data set. Data set selected by name. The following types of data * sets are possible: * BL_ANSWER_TYPE_INT - 32bit integer * BL_ANSWER_TYPE_STR - zero-terminated string (variable length) * BL_ANSWER_TYPE_BIN - binary data (variable length) * * @param[in] handle Handle representing the channel on which the answer data was received (see * @ref BLC_getChannelHandle ) * @param[in] name Char*-string with the name of answer data set * @param[out] type Type of data set is returned within * @param[in,out] length Input the length of the allocated parameter type. Output the length of the * returned data in parameter type. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getAnswerTypeByName(BL_HANDLE handle, const char* name, BL_ANSWER_TYPE* type, size_t* length); /** @brief Get type of a parameter of the last answer data from a BabyLIN * * If the last answer to a command contained additional data, then this function reports the type * and size for a specific answer data set. Data set selected by index. The following types of data * sets are possible: * BL_ANSWER_TYPE_INT - 32bit integer * BL_ANSWER_TYPE_STR - zero-terminated string (variable length) * BL_ANSWER_TYPE_BIN - binary data (variable length) * * @param[in] handle Handle representing the channel on which the answer data was received (see * @ref BLC_getChannelHandle ) * @param index Zero-based index of the answer data set * @param[out] type Type of data set is returned within * @param[in,out] length Input the length of the allocated parameter type. Output the length of the * returned data in parameter type. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getAnswerTypeByIndex(BL_HANDLE handle, const unsigned int index, BL_ANSWER_TYPE* type, size_t* length); /** @brief Get name of a parameter of the last answer data from a BabyLIN * * @param[in] handle Handle representing the channel on which the answer data was * received (see @ref BLC_getChannelHandle ) * @param index Zero-based index of the answer data set. * @param[out] nameBuffer The buffer to store the name in. * @param[in,out] nameBufferLength Input a pointer to the length of the nameBuffer. Output the * length of the name. * @return Status of operation; '=0' means successful, '!=0' otherwise. See * standard return values for error, or for textual representation * (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getAnswerNameByIndex(BL_HANDLE handle, int index, char* nameBuffer, int* nameBufferLength); /** @brief Get the value of a parameter of the last answer data from a BabyLIN * * If the last answer to a command contained additional data, then this function copies the answer * data set over into the destination buffer. Data set selected by name. * * @param[in] handle Handle representing the channel on which the answer data was received (see * @ref BLC_getChannelHandle ) * @param[in] name Char*-string with the name of answer data set * @param[out] buffer Pointer to destination buffer for the data set * @param[in,out] length Input length of preallocated buffer. Output length of written data. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getAnswerByName(BL_HANDLE handle, const char* name, void* buffer, size_t length); /** @brief Get the value of a parameter of the last answer data from a BabyLIN * * If the last answer to a command contained additional data, then this function copies the answer * data set over into the destination buffer. Data set selected by index. * * @param[in] handle Handle representing the channel on which the answer data was received (see * @ref BLC_getChannelHandle ) * @param index Zero-based index of the answer data set * @param[out] buffer Pointer to destination buffer for the data set * @param length Length of destination buffer * @return Status of operation; '=0' means successful, '!=0' otherwise. * See standard return values for error, or for textual * representation (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getAnswerByIndex(BL_HANDLE handle, const unsigned int index, void* buffer, size_t length); /** @brief Send a command to the BabyLIN device. * * The command must match the command syntax as specified in the BabyLIN documentation (see @ref * babylin_commands). The trailing ';' may be omitted; * * @param[in] handle Handle representing the channel to send the command to (see @ref * BLC_getChannelHandle ) * @param[in] command C-string with @ref Commands (e.g. "status;") * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_sendCommand(BL_HANDLE handle, const char* command); /** * @brief Sends a ASCII protocol command and wait for its response. * * A command can be sent using the ASCII protocol. The function can be blocked, until a response was * received. * * @param[in] handle A handle representing an ASCII connection * @param[in] command The command to send. * @param[out] buffer A buffer to receive the answer. * @param bufferLength A buffer with enough space. * @param timeout_ms The length of the passed buffer * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_sendASCIICommand( BL_HANDLE handle, const char* command, char* buffer, int bufferLength, int timeout_ms); /** @brief Shorthand for "setsig" command (see @ref babylin_commands) * * @param[in] handle Handle representing the channel to send the command to (see @ref * BLC_getChannelHandle ) * @param signalNr The signal to set the value * @param value The value to assign to the signal * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_setsig(BL_HANDLE handle, int signalNr, unsigned long long value); /** @brief Shorthand for "mon_set" command (see @ref babylin_commands) * * @param[in] handle Handle representing the channel to send the command to (see @ref * BLC_getChannelHandle ) * @param frameid The BUS-frame-id to set the framedata for * @param[out] databytes Array of databytes to use as the framedata * @param len The length of the data * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_mon_set(BL_HANDLE handle, int frameid, const int* databytes, int len); /** @brief Shorthand for "mon_xmit" command (see @ref babylin_commands) * * @param[in] handle Handle representing the channel to send the command to (see @ref * BLC_getChannelHandle ) * @param frameId the BUS-frame-id to transmit * @param slottime slottime = 0 equals a single transmit, slottime > 0 equals cyclic transmission * of frame * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_mon_xmit(BL_HANDLE handle, int frameId, int slottime); /** @brief Shorthand for "mon_set" followed by "mon_xmit" command (see @ref babylin_commands) * * @param[in] handle Handle representing the channel to send the command to (see @ref * BLC_getChannelHandle ) * @param frameId The BUS-frame-id to set and transmit * @param[out] databytes Array of databytes to use as the framedata * @param len The length of the data * @param slottime Slottime = 0 equals a single transmit, slottime > 0 equals cyclic * transmission of frame * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_mon_set_xmit(BL_HANDLE handle, int frameId, const int* databytes, int len, int slottime); /** @brief Convenience function for command "macro_result" handling answer data * * Executes "macro_result" in a loop until "macro_result" returns anything else than 150 (macro * still running), or timeout_ms is exceeded A possible return value of "macro_result" is stored * into return_value if the returncode was 155 (finished with error), 156 (finished with exception) * or 0 (macro finished) * * @param[in] handle Handle representing the channel to send the command to (see @ref * BLC_getChannelHandle ) * @param macro_nr The index of the macro from the section. * @param[out] return_value The memory where to store the received macro result. * @param timeout_ms The timeout in milliseconds for the macro to complete. * @return BLC_macro_result returns the last return value of the "macro_result" * command. Return values 0, 155, 156 signal success, for other values see * standard error values @ref BabyLINReturncodes.h. */ int BL_DLLIMPORT BLC_macro_result(BL_HANDLE handle, int macro_nr, int64_t* return_value, unsigned int timeout_ms); /** @brief Returns the result string of given macro, if it was set within the macro. * * Requests the result string of a macro. If no result string was set, the function retuns * @ref BL_NO_DATA. * * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle * ) * @param macro_nr The index of the macro from the section. * @param[out] dstbuf Pointer to char array which gets filled (must hold min. 'buflen' bytes). * @param buflen How many bytes should get returned. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getMacroResultString(BL_HANDLE handle, int macro_nr, char* dstbuf, int buflen); /** @brief Returns the result of a "varrd" command in a convienent way. * * Reads a number of signal values and puts them directly into a bytearray. Performs the same * operation as a @ref BLC_sendCommand with "varrd" but only allows 8bit signals to be read. This * call blocks until all data is read and returned. * * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @param signal_nr The index of the first signal to read. * @param[out] dstbuf Pointer to char array which gets filled (must hold min. 'buflen' bytes). * @param length How many signals should be read. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_varRead(BL_HANDLE handle, int signal_nr, char* dstbuf, int length); /** @brief Writes an array of signals to values given by a bytearray. * * Writes "data_len" number of signals, starting from "signal_nr" with byte values from the "data" * array. Performs the same operation as a @ref BLC_sendCommand with "varwr" in mode 1, but only * allows 8bit values to be set. * * @param[in] handle Handle representing a channel (see @ref BLC_getChannelHandle ) * @param signal_nr The index of the first signal to write. * @param[in] data Byte array with data to write. Each byte will be written in one signal. * @param data_len How long the data buffer is. Also defines how many signals are written. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_varWrite(BL_HANDLE handle, int signal_nr, char* data, int data_len); /** @brief Creates a adhoc protocol struct with the default settings for the given protocol type. * * Creates a adhoc protocol struct with the default settings for the given protocol type. * @param type Type of the protocol to create. * @return A valid struct filled with default values for this protocol. */ BLC_ADHOC_PROTOCOL BL_DLLIMPORT BLC_AdHoc_DefaultProtocol(ADHOC_PROTOCOL_TYPE type); /** @brief Creates a adhoc service struct with the default settings for the service and protocol * combination. * * Creates a adhoc service struct with the default settings for the service and protocol * combination. * @param protocol A protocol description struct. * @return A valid struct filled with default values for this service. */ BLC_ADHOC_SERVICE BL_DLLIMPORT BLC_AdHoc_DefaultService(const BLC_ADHOC_PROTOCOL protocol); /** @brief Creates a adhoc execute struct with the default settings for the execution of adhoc * protocols. * * Creates a adhoc execute struct with the default settings for the execution of adhoc protocols. * @return A valid struct filled with default values for this service. */ BLC_ADHOC_EXECUTE BL_DLLIMPORT BLC_AdHoc_DefaultExecute(); /** @brief Creates a adhoc protocol in the device with the given settings. * * Creates a adhoc protocol in the device with the given settings. * @param[in] channel A channel handle for the channel on which the protocol shall be * created. * @param[in] protocol A protocol definition struct containing the settings for the new * protocol. * @param[out] protocol_handle The pointer to a handle value to return the devices created * protocol to that is used to identify it. It might be set to NULL in * case an error occured. * @return Status of operation; '=0' means successful, '!=0' otherwise. See * standard return values for error, or for textual representation (for * return values < -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_AdHoc_CreateProtocol(BL_HANDLE channel, BLC_ADHOC_PROTOCOL* protocol, BL_ADHOC_HANDLE* protocol_handle); /** @brief Creates a adhoc service in the device with the given settings for an existing protocol. * * Creates a adhoc service in the device with the given settings for an existing protocol. * @param[in] channel A channel handle for the channel on which the service shall be * created. * @param protocol A protocol handle referencing a existing protocol in the device. * @param[in] service A service struct containing the settings for this new service. * @param[out] service_handle The pointer to a handle value to return the devices created service * to that is used to identify it. It might be set to NULL in case an * error occured. * @return Status of operation; '=0' means successful, '!=0' otherwise. See * standard return values for error, or for textual representation (for * return values < -10000) @ref BLC_getLastError. * @see @ref BLC_AdHoc_CreateProtocol */ int BL_DLLIMPORT BLC_AdHoc_CreateService(BL_HANDLE channel, BL_ADHOC_HANDLE protocol, BLC_ADHOC_SERVICE* service, BL_ADHOC_HANDLE* service_handle); /** @brief Runs a given protocol service on the device in a blocking way, the function returns after * the protocol is completly done, or the timeout expires. * * Runs a given protocol service on the device in a blocking way, the function returns after the * protocol is completly done, or the timeout expires. * @param[in] channel A channel handle for the channel on which the protocol service * shall be executed. * @param protocol_handle A protocol handle referencing a existing protocol in the * device (see @ref BLC_AdHoc_CreateProtocol). * @param service_handle A service handle referencing a existing service in the device. * @param[in] execute_flags A @ref BLC_ADHOC_EXECUTE struct defining some additional * settings for the execute. * @param[in] req_payload The payload for the specified protocol service to use. * @param[in] req_payload_length The size of the payload buffer. * @param[out] rsp_payload A preallocated empty buffer where the protocol service * response will be mapped into. * @param[in,out] rsp_payload_length Input the size of the response payload buffer. Output the * length of the received payload. * @param timeout The timeout when the function should return, even when the * protocol service is not done. This value is in milliseconds * (ms). * @return Status of operation; '=0' means successful, '!=0' otherwise. * See standard return values for error, or for textual * representation (for return values < -10000) @ref * BLC_getLastError. * @see @ref BLC_AdHoc_CreateProtocol, @ref BLC_AdHoc_CreateService */ int BL_DLLIMPORT BLC_AdHoc_Execute(BL_HANDLE channel, BL_ADHOC_HANDLE protocol_handle, BL_ADHOC_HANDLE service_handle, BLC_ADHOC_EXECUTE* execute_flags, const unsigned char* req_payload, int req_payload_length, unsigned char* rsp_payload, int* rsp_payload_length, int timeout); /** @brief Runs a given protocol service on the device in a non-blocking way, the function returns * directly after the protocol has be started in the device. * * Runs a given protocol service on the device in a non-blocking way, the function returns directly * after the protocol has be started in the device. * @param[in] channel A channel handle for the channel on which the protocol service * shall be executed. * @param protocol_handle A protocol handle referencing a existing protocol in the device. * @param service_handle A service handle referencing a existing service in the device. * @param[in] execute_flags A @ref BLC_ADHOC_EXECUTE struct defining some additional settings * for the execute. * @param[in] req_payload The payload for the specified protocol service to use. * @param[in] req_payload_length The size of the allocated response payload buffer. * @param[out] execute_handle A pointer to an preallocated instance of the struct. When this * function is successful (see return values below) this handle will * contain a reference to the running service, else it may be NULL. * @return Status of operation; '=0' means successful, '!=0' otherwise. See * standard return values for error, or for textual representation * (for return values < -10000) @ref BLC_getLastError. * @see @ref BLC_AdHoc_CreateProtocol, @ref BLC_AdHoc_CreateService */ int BL_DLLIMPORT BLC_AdHoc_ExecuteAsync(BL_HANDLE channel, BL_ADHOC_HANDLE protocol_handle, BL_ADHOC_HANDLE service_handle, BLC_ADHOC_EXECUTE* execute_flags, const unsigned char* req_payload, int req_payload_length, BL_ADHOC_HANDLE* execute_handle); /** @brief Returns the current state of the given protocol service. * * Returns the current state of the given protocol service. * @param[in] channel A channel handle for the channel on which the protocol service was * executed. * @param execute_handle The handle to the executed protocol service. * @return Returns: 0 = Protocol service executed successfully. * TODO: State ID codes else = An error code, see standard return values * for error, or for textual representation (for return values < -10000) * @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_AdHoc_GetState(BL_HANDLE channel, BL_ADHOC_HANDLE execute_handle); /** @brief Returns the response payload of the given protocol service. * * Returns the response payload of the given protocol service. * @param[in] channel A channel handle for the channel on which the protocol service * was executed. * @param execute_handle The handle to the executed protocol service. * @param[out] rsp_payload A preallocated empty buffer where the protocol service response * will be mapped into. * @param[in,out] rsp_payload_size Input the size of the preallocated response buffer. Output the * length of received payload. * @return Returns: 0 = Response was read correctly, the buffer contains * valid data. else = An error code, see standard return values for * error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_AdHoc_GetResponse(BL_HANDLE channel, BL_ADHOC_HANDLE execute_handle, unsigned char* rsp_payload, int* rsp_payload_size); /** @brief Deletes an existing adhoc protocol in the device. This deletes all child services of the * protocol too. * * Deletes an existing adhoc protocol in the device. This deletes all child services of the protocol * too. * @param[in] channel A channel handle for the channel on which the protocol was created. * @param protocol A handle to the protocol to delete. * @return 0 = Protocol was deleted successfully. else = An error code, see standard * return values for error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. * @see @ref BLC_AdHoc_CreateProtocol */ int BL_DLLIMPORT BLC_AdHoc_DeleteProtocol(BL_HANDLE channel, BL_ADHOC_HANDLE protocol); /** @brief Deletes an existing adhoc service for the given protocol in the device. * * Deletes an existing adhoc service for the given protocol in the device. * @param[in] channel A channel handle for the channel on which the service was created. * @param protocol A handle to the protocol of the service. * @param service A handle to the service which shall be deleted. * @return 0 = Service was deleted successfully. else = An error code, see standard * return values for error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. * @see @ref BLC_AdHoc_CreateProtocol, @ref BLC_AdHoc_CreateService */ int BL_DLLIMPORT BLC_AdHoc_DeleteService(BL_HANDLE channel, BL_ADHOC_HANDLE protocol, BL_ADHOC_HANDLE service); /** @brief Deletes all existing adhoc protocol for the given channel. This deletes all services too. * * Deletes all existing adhoc protocol for the given channel. This deletes all services too. * @param[in] channel A channel handle for the channel where all protocols shall be deleted. * @return 0 = Protocols were deleted successfully. else = An error code, see standard * return values for error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. * @see @ref BLC_AdHoc_CreateProtocol */ int BL_DLLIMPORT BLC_AdHoc_DeleteAllProtocol(BL_HANDLE channel); /** @brief Deletes all existing adhoc services for the given channel and protocol. * * Deletes all existing adhoc services for the given channel and protocol. * @param[in] channel A channel handle for the channel where the protocol was created. * @param protocol A protocol handle referencing the protocol which services shall be deleted. * @return 0 = Services were deleted successfully. else = An error code, see standard * return values for error, or for textual representation (for return values < * -10000) @ref BLC_getLastError. * @see @ref BLC_AdHoc_CreateProtocol, @ref BLC_AdHoc_CreateService */ int BL_DLLIMPORT BLC_AdHoc_DeleteAllService(BL_HANDLE channel, BL_ADHOC_HANDLE protocol); /** @brief Returns the number of tables currently in the device / the loaded SDF. * * Returns the number of tables currently in the device / the loaded SDF. * @param[in] handle Channel handle to the channel where the command shall be executed. * @param[out] table_count Preallocated pointer which will be filled with a valid value when the * return value is @ref BL_OK. Contains the number of tables. * @return 0 = Function has run successfully. else = An error code, see standard * return values for error, or for textual representation (for return * values < -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getTableCount(BL_HANDLE handle, int64_t* table_count); /** @brief Returns the number of rows currently in the given table. * * Returns the number of rows currently in the given table. * @param[in] handle Channel handle to the channel where the command shall be executed. * @param table_id The id for the table. * @param[out] row_count Preallocated pointer which will be filled with a valid value when the * return value is @ref BL_OK. Contains the number of rows in the table. * @return 0 = Function has run successfully. else = An error code, see standard * return values for error, or for textual representation (for return values * < -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getTableRowCount(BL_HANDLE handle, int table_id, int64_t* row_count); /** @brief Returns the number of columns currently in the given table. * * Returns the number of columns currently in the given table. * @param[in] handle Channel handle to the channel where the command shall be executed. * @param table_id The id for the table. * @param[out] column_count Preallocated pointer which will be filled with a valid value when the * return value is @ref BL_OK. Contains the number of columns in the table. * @return 0 = Function has run successfully. else = An error code, see standard * return values for error, or for textual representation (for return * values < -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getTableColumnCount(BL_HANDLE handle, int table_id, int64_t* column_count); /** @brief Returns the value of the specified table cell. * * Returns the value of the specified table cell. * @param[in] handle Channel handle to the channel where the command shall be executed. * @param table_id The id for the table. * @param row The row of the table to read. * @param column The column of the table to read. * @param[out] read_value Preallocated pointer which will be filled with a valid value when the * return value is @ref BL_OK. If the cell is a integer cell, this will be * the cells value. * @param[out] buf Preallocated buffer which will be filled when the return value is @ref * BL_OK. If the cell is a string cell, this will be the cells value. * @param[in,out] bufsz Preallocated pointer to a value of size of buf, which will be filled with * a valid value when the return value is @ref BL_OK. If the cell is a string * cell, this returns the length of cells data. For an integer cell this * value is set to 0. * @return 0 = Function has run successfully. else = An error code, see standard * return values for error, or for textual representation (for return values * < -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_tableRead(BL_HANDLE handle, int table_id, int row, int column, int64_t* read_value, char* buf, int* bufsz); /** @brief Writes the given integer value into the table cell. * * Writes the given integer value into the table cell. * @param[in] handle Channel handle to the channel where the command shall be executed. * @param table_id The id for the table. * @param row The row of the table to write. * @param column The column of the table to write. * @param value The integer value to write into the cell. * @return 0 = Function has run successfully. else = An error code, see standard return * values for error, or for textual representation (for return values < -10000) * @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_tableWrite(BL_HANDLE handle, int table_id, int row, int column, int64_t value); /** @brief Writes the given string value into the table cell. * * Writes the given string value into the table cell. * @param[in] handle Channel handle to the channel where the command shall be executed. * @param table_id The id for the table. * @param row The row of the table to write. * @param column The column of the table to write. * @param[out] value The zero-terminated string value to write into the cell. * @return 0 = Function has run successfully. else = An error code, see standard return * values for error, or for textual representation (for return values < -10000) * @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_tableWriteText(BL_HANDLE handle, int table_id, int row, int column, const char* value); /** @brief Writes the given values into all table cells than span from (start_row, start_column) to * (end_row, end_column). * * Writes the given values into all table cells than span from (start_row, start_column) to * (end_row, end_column). * @param[in] handle Channel handle to the channel where the command shall be executed. * @param table_id The id for the table. * @param start_row The start row of the table to write. * @param start_column The start column of the table to write. * @param end_row The end row of the table to write. * @param end_column The end column of the table to write. * @param fill_value This value is used for integer cells. * @param[out] fill_text This zero-terminated value is used for string cells. * @return 0 = Function has run successfully. else = An error code, see standard * return values for error, or for textual representation (for return values * < -10000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_tableFill(BL_HANDLE handle, int table_id, int start_row, int start_column, int end_row, int end_column, int64_t fill_value, const char* fill_text); /** @}*/ /** @addtogroup pull_handling * @brief List of functions to pull retrieved data from a connection * * The following functions are used to get data which has been received from a BabyLIN-device. * This approach uses the pull method, i.e. you will not get any information pushed ( see @ref * callback_handling "Callback Handling" ) when it's received. Instead you have to call these * functions whenever you want to get retrieved data. * @{ */ /** @brief Retrieve the last framedata available for a frame * * @attention The Baby-LIN fills the receiver queue only if command "disframe" or "mon_on" is sent * before ( see @ref babylin_commands ) * @param[in] handle Handle representing the channel to get the frame data from (see @ref * BLC_getChannelHandle ) * @param frameNr Zero based index of requested frame entry. * @param[out] framedata Pointer to a pre-allocated @ref BLC_FRAME structure. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getLastFrame(BL_HANDLE handle, int frameNr, BLC_FRAME* framedata); /** @brief Fetches the next frame on Channel from the receiver queue. * * @attention The Device fills the receiver queue only if command "disframe" or "mon_on" is sent * before. * @param[in] handle Handle representing the channel to get the frame data from (see @ref * BLC_getChannelHandle ) * @param[out] framedata Pointer to a pre-allocated @ref BLC_FRAME structure. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextFrame(BL_HANDLE handle, BLC_FRAME* framedata); /** @brief Fetches the next frames on channel from the receiver queue. * * @attention The device fills the receiver queue only if command "disframe" sent before. * @param[in] handle Handle representing the channel to get the frame data from (see @ref * BLC_getChannelHandle ) * @param[out] framedata Pointer to a pre-allocated @ref BLC_FRAME (structure) array. * @param[in,out] size Input size of the preallocated @ref BLC_FRAME array, which must be a * positive value. On output, the actual number of retrieved @ref BLC_FRAMEs, * which might be less than *size on input. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextFrames(BL_HANDLE handle, BLC_FRAME* framedata, int* size); /** @brief Fetches the next frame on Channel from the receiver queue with wait-timeout * * Retrieves the next frame received from the BabyLIN. If no frame-data is available, the funktion * will wait _up to_ timeout_ms milliseconds for new data before it returns with a BL_TIMEOUT * returncode * @attention The Device fills the receiver queue only if command "disframe" or "mon_on" is sent * before. * @param[in] handle Handle representing the channel to get the frame data from (see @ref * BLC_getChannelHandle ) * @param[out] framedata Pointer to a pre-allocated @ref BLC_FRAME structure. * @param timeout_ms Timeout to wait for new framedata * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextFrameTimeout(BL_HANDLE handle, BLC_FRAME* framedata, int timeout_ms); /** @brief Fetches the next frames on channel from the receiver queue with wait-timeout * * Retrieves the next frames received from the BabyLIN. If no frame-data is available, the funktion * will wait _up to_ timeout_ms milliseconds for new data before it returns with a BL_TIMEOUT * returncode * @attention The Device fills the receiver queue only if command "disframe" or "mon_on" is sent * before. * * @param[in] handle Handle representing the channel to get the frame data from (see @ref * BLC_getChannelHandle ) * @param[out] framedata Pointer to a pre-allocated @ref BLC_FRAME structure. * @param timeout_ms Timeout to wait for new framedata * @param[in,out] size Input size of the preallocated @ref BLC_FRAME array, which must be a * positive value. On output, the actual number of retrieved @ref BLC_FRAMEs, * which might be less than *size on input. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextFramesTimeout(BL_HANDLE handle, BLC_FRAME* framedata, int timeout_ms, int* size); /** @brief Fetches the next regular or jumbo frame on Channel from the receiver queue. * * @attention The Device fills the receiver queue only if command "disframe" or "mon_on" is sent * before. * @param[in] handle Handle representing the channel to get the jumbo frame data from (see @ref * BLC_getChannelHandle ) * @param[out] framedata Pointer to a pre-allocated @ref BLC_JUMBO_FRAME structure. * @return Status of operation; '=0' means successful, '!=0' otherwise. * See standard return values for error, or for textual * representation (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextJumboFrame(BL_HANDLE handle, BLC_JUMBO_FRAME* framedata); /** @brief Fetches the next regular or jumbo frames on channel from the receiver queue. * * @attention The device fills the receiver queue only if command "disframe" sent before. * @param[in] handle Handle representing the channel to get the frame data from (see @ref * BLC_getChannelHandle ) * @param[out] framedata Pointer to a pre-allocated @ref BLC_JUMBO_FRAME (structure) array. * @param[in,out] size Input size of the preallocated @ref BLC_FRAME array, which must be a * positive value. On output, the actual number of retrieved @ref * BLC_JUMBO_FRAMEs, which might be less than *size on input. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextJumboFrames(BL_HANDLE handle, BLC_JUMBO_FRAME* framedata, int* size); /** @brief Fetches the next regular or jumbo frame on Channel from the receiver queue with * wait-timeout * * Retrieves the next jumbo frame received from the BabyLIN. If no frame-data is available, the * function will wait _up to_ timeout_ms milliseconds for new data before it returns with a * BL_TIMEOUT returncode * @attention The Device fills the receiver queue only if command "disframe" or "mon_on" is sent * before. * @param[in] handle Handle representing the channel to get the jumbo frame data from (see * @ref BLC_getChannelHandle ) * @param[out] framedata Pointer to a pre-allocated @ref BLC_JUMBO_FRAME structure. * @param timeout_ms Timeout to wait for new framedata * @return Status of operation; '=0' means successful, '!=0' otherwise. * See standard return values for error, or for textual representation (for * return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextJumboFrameTimeout(BL_HANDLE handle, BLC_JUMBO_FRAME* framedata, int timeout_ms); /** @brief Fetches the next regular or jumbo frames on channel from the receiver queue with * wait-timeout * * Retrieves the next jumbo frames received from the BabyLIN. If no frame-data is available, the * function will wait _up to_ timeout_ms milliseconds for new data before it returns with a * BL_TIMEOUT returncode * @attention The Device fills the receiver queue only if command "disframe" or "mon_on" is sent * before. * * @param[in] handle Handle representing the channel to get the jumbo frame data from (see * @ref BLC_getChannelHandle ) * @param[out] framedata Pointer to a pre-allocated @ref BLC_JUMBO_FRAME structure. * @param timeout_ms Timeout to wait for new framedata * @param[in,out] size Input size of the preallocated @ref BLC_FRAME array, which must be a * positive value. On output, the actual number of retrieved @ref * BLC_JUMBO_FRAMEs, which might be less than *size on input. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextJumboFramesTimeout(BL_HANDLE handle, BLC_JUMBO_FRAME* framedata, int timeout_ms, int* size); /** @brief Fetches the next signal from the receiver queue. * * @attention The Baby-LIN fills the receiver queue only if command "dissignal" sent before. * * @param[in] handle Handle representing the channel to get the signal data from (see @ref * BLC_getChannelHandle ) * @param[out] signaldata Pointer to a pre-allocated @ref BLC_SIGNAL structure. * @return Status of operation; '=0' means successful, '!=0' otherwise. See * standard return values for error, or for textual representation (for * return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextSignal(BL_HANDLE handle, BLC_SIGNAL* signaldata); /** @brief Fetches the next signals from the receiver queue. * * @attention The Baby-LIN fills the receiver queue only if command "dissignal" sent before. * * @param[in] handle Handle representing the channel to get the signal data from (see @ref * BLC_getChannelHandle ) * @param[out] signaldata Pointer to a pre-allocated @ref BLC_SIGNAL (structure) array. * @param[in,out] size Input size of the preallocated @ref BLC_SIGNAL array, which must be a * positive value. On output, the actual number of retrieved @ref * BLC_SIGNALs, which might be less than *size on input. * @return Status of operation; '=0' means successful, '!=' otherwise. See standard * return values for error, or for textual representation (for return * values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextSignals(BL_HANDLE handle, BLC_SIGNAL* signaldata, int* size); /** @brief Fetches the next signals for a specific signal from the receiver queue. * * @attention The Baby-LIN fills the receiver queue only if command "dissignal" sent before. * @attention This function will remove the signal values from the queue. Further signal receiving * is no longer guaranteed to be in order. * * @param[in] handle Handle representing the channel to get the signal data from (see @ref * BLC_getChannelHandle ) * @param[in] signaldata Pointer to a pre-allocated @ref BLC_SIGNAL (structure) array. * @param size Size of the pre-allocated @ref BLC_SIGNAL array, in units of @ref * BLC_SIGNAL, which must be a positive value. * @param signalNumber The signal number to get the signals for * @return Number of signals found, '<0' on error. See standard return values for * error, or for textual representation (for return values < -1000) @ref * BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextSignalsForNumber(BL_HANDLE handle, BLC_SIGNAL* signaldata, int size, int signalNumber); /** @brief Fetches the next Bus error from the receiver queue. * * @param[in] handle Handle representing the channel to get the error data from (see @ref * BLC_getChannelHandle ) * @param[out] errordata Pointer to a pre-allocated @ref BLC_ERROR structure. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextBusError(BL_HANDLE handle, BLC_ERROR* errordata); /** @brief Fetches the next complete DTL request from the receiver queue. * * @param[in] handle Handle representing the channel to get the dtl data from (see @ref * BLC_getChannelHandle ) * @param[out] frame Pointer to a pre-allocated @ref BLC_DTL structure. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextDTLRequest(BL_HANDLE handle, BLC_DTL* frame); /** @brief Fetches the next complete DTL response from the receiver queue. * * @param[in] handle Handle representing the channel to get the dtl data from (see @ref * BLC_getChannelHandle ) * @param[out] frame Pointer to a pre-allocated @ref BLC_DTL structure. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNextDTLResponse(BL_HANDLE handle, BLC_DTL* frame); /** @brief Return the current signal value (for non-array signals). * @attention The Baby-LIN reports the signal value only if command "dissignal" sent before. * * @note Special signalNr '-1' returns always 4711 in *value; signalNr '-2' returns a counter * increased by 1 after every call. * * @param[in] handle Handle representing the channel to get the signal value from (see @ref * BLC_getChannelHandle ) * @param signalNr Number of the signal according to SDF. * @param[out] value Pointer to an word-sized variable getting the value. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getSignalValue(BL_HANDLE handle, int signalNr, unsigned long long* value); /** @brief Return the current signal value (for non-array signals) with timestamp * @attention The Baby-LIN reports the signal value only if command "dissignal" sent before. * * @note Special signalNr '-1' returns always 4711 in *value; signalNr '-2' returns a counter * increased by 1 after every call. * * @param[in] handle Handle representing the channel to get the signal value from (see @ref * BLC_getChannelHandle ) * @param signalNr Number of the signal according to SDF. * @param[out] value Pointer to an word-sized variable getting the value. * @param[out] timestamp Pointer to an word-sized variable getting the timestamp when the signal * was received (PC-Timestamp (ms)). * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getSignalValueWithTimestamp(BL_HANDLE handle, int signalNr, unsigned long long* value, unsigned long long* timestamp); /** @brief Returns the current signal value (for non-array signals). * * @attention The Baby-LIN reports the signal value only if command "dissignal" sent before. * @param[in] handle Handle representing the channel to get the signal value from (see @ref * BLC_getChannelHandle ) * @param[in] signalName Name of the Signal as declared in LDF. * @param[out] value Pointer to an word-sized variable getting the value. * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getSignalValueByName(BL_HANDLE handle, const char* signalName, unsigned long long* value); /** @brief Returns the current signal value (for array signals). * * @attention The Baby-LIN reports the signal value only if command "dissignal" sent before. * @note * Special signalNr '-1' returns always the hex array { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, * 0xef } in *array; signalNr '-2' returns a counted sequence, where the byte 0 holds the actual * counter and the following bytes hold the 'history'; i.e.: * * @par * 1st call: { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } * * @par * 2nd call: { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } * * @par * 3rd call: { 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } * * @par * 4th call: { 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 } * * @par * ...etc... * * @param[in] handle Handle representing the channel to get the signal value from (see @ref * BLC_getChannelHandle ) * @param signalNr Number of the signal accordng to SDF. * @param[out] array Pointer to an 8 byte array getting the value. It must always have the size * of 8 bytes, even for smaller array signals! * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values < * -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getSignalArray(BL_HANDLE handle, int signalNr, unsigned char* array); /** @brief Returns the current signal value (for array signals) with timstamp. * * @attention The Baby-LIN reports the signal value only if command "dissignal" sent before. * @note * Special signalNr '-1' returns always the hex array { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, * 0xef } in *array; signalNr '-2' returns a counted sequence, where the byte 0 holds the actual * counter and the following bytes hold the 'history'; i.e.: * * @par * 1st call: { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } * * @par * 2nd call: { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } * * @par * 3rd call: { 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } * * @par * 4th call: { 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 } * * @par * ...etc... * * @param[in] handle Handle representing the channel to get the signal value from (see @ref * BLC_getChannelHandle ) * @param signalNr Number of the signal accordng to SDF. * @param[out] array Pointer to an 8 byte array getting the value. It must always have the size * of 8 bytes, even for smaller array signals! * @param[out] timestamp Pointer to an word-sized variable getting the timestamp * when the signal was received (PC-Timestamp (ms). * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getSignalArrayWithTimestamp(BL_HANDLE handle, int signalNr, unsigned char* array, unsigned long long* timestamp); /** @brief Returns the current signal value (for array signals). * * @attention The Baby-LIN reports the signal value only if command "dissignal" sent before. * @param[in] handle Handle representing the channel to get the signal value from (see @ref * BLC_getChannelHandle ) * @param[in] signalName Name of the Signal as declared in LDF. * @param[out] array Pointer to an 8 byte array getting the value. It must always have the size * of 8 bytes, even for smaller array signals! * @return Status of operation; '=0' means successful, '!=0' otherwise. See standard * return values for error, or for textual representation (for return values * < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getSignalArrayByName(BL_HANDLE handle, const char* signalName, unsigned char* array); /** @brief Returns the type of a signal * * @param[in] handle Handle representing the channel to which the signal belongs (see @ref * BLC_getChannelHandle ) * @param idx Zero based index of requested signal entry. * @return Status of operation; Signal is Array == 1; Signal is scalar Value == 0. Values * <0 on error. See standard return values for error, or for textual * representation (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_isSignalArray(BL_HANDLE handle, int idx); /** @brief Encodes the signal's value as defined in the corresponding Signal Encoding tables of * LDF/SDF. * * If no SignalEncoding is specified for this signal, the value itself is written into destination * buffer 'description'. If one of the required pointers is NULL or the buffer size is too small, * the function returns the needed minimum buffer length in 'length'. It's possible to use two * variants to get encoded signal: 1) pointer 'encUnit' and 'buffLen1' set to NULL: then encoded * signal saved inclusive unit in buffer 'encSignal' 2) pointer 'encUnit' and 'buffLen1' != NULL: * unit of signal saved separately in buffer 'encUnit' * @param[in] handle Handle representing the channel to which the signal belongs (see @ref * BLC_getChannelHandle ) * @param signalNr Number (Index) of the signal accordng to SDF. * @param value Value to be encoded * @param[out] encSignal Points to save location of encoded signal value (inclusive 'unit', if * 'encUnit' not used) * @param[in,out] buffLen0 Input the allocated length of 'encSignal' buffer. Output the length of * the written data. * @param[out] encUnit Optional: points to save location of signal unit (if this pointer is * NULL then 'unit' saved in 'encSignal' buffer also) * @param[in,out] buffLen1 Optional: Input the allocated length of 'encUnit' buffer (if this * pointer is NULL then 'unit' saved in 'encSignal' buffer also). Output * the length of the written data. * @return Status of operation; '=0' means successful, '!=0' otherwise. See * standard return values for error, or for textual representation (for * return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_encodeSignal(BL_HANDLE handle, int signalNr, unsigned long long value, char* encSignal, size_t* buffLen0, char* encUnit, size_t* buffLen1); /** * @brief BLC_decodeSignal takes an encoded Signal value and tries to compute it back to its Signal * value. Rounding errors might occur for large signals or encoding scales and offsets. * * @param[in] handle The Channel handle the Signal does come from. * @param signalNr The number of the Signal that has the encodings. * @param[out] encSignal The encoded signal value as a c-string(zero terminated). * @param[out] value The reverted value. rounding errors might occur. * @return @ref BL_OK if the value could be converted, != 0 otherwise. */ int BL_DLLIMPORT BLC_decodeSignal(BL_HANDLE handle, int signalNr, char* encSignal, int64_t* value); /** @brief Get values of all signals mapped to a frame * * @param[in] handle Handle representing the channel to which the frame belongs (see @ref * BLC_getChannelHandle ) * @param frameNr Frame number (according to SDF) to get the signal data from * @param[out] signalList Pre-allocated array of @ref BLC_SIGNAL structures to store the signal data * to * @param signalListLen Length of the pre-allocated array of @ref BLC_SIGNAL structures * @return The number of signals stored to signalList. Values <0 on error. See * standard return values for error, or for textual representation (for * return values < -1000) @ref BLC_getLastError. * */ int BL_DLLIMPORT BLC_getSignalsInFrame(BL_HANDLE handle, int frameNr, BLC_SIGNAL* signalList, int signalListLen); /** * @brief Returns some details for given frame entry. * * @param[in] handle Handle representing the channel to which the frame belongs (see @ref * BLC_getChannelHandle ) * @param idx Zero based index of requested frame entry (sdf number). * @param[out] pbusid Pointer to int, which gets filled with BUS ID (without parity bits on * LIN-Bus) * @param[out] psize Pointer to int, which gets filled with size of frame in bytes * @param[out] pnodenum Pointer to int, which gets filled with nodeindex of publishing node for * this frame * @param[out] pframetype Pointer to int, which gets filled with LIN version of this frame (LIN * channel only) */ int BL_DLLIMPORT BLC_getFrameDetails( BL_HANDLE handle, int idx, int* pbusid, int* psize, int* pnodenum, int* pframetype); /** * @brief Returns some details for given frame entry. * * @param[in] handle Handle representing the channel to which the signal belongs (see @ref * BLC_getChannelHandle ) * @param signalNr Zero based index of the signal entry (sdf number). * @return The number of the node the signal is published by. -1 if signal is virtual. * Values <-1 on error. See standard return values for error, or for textual * representation (for return values < -1000) @ref BLC_getLastError. */ int BL_DLLIMPORT BLC_getNodeForSignal(BL_HANDLE handle, int signalNr); /** @}*/ /** @addtogroup direct_mode * @brief List of functions to access the LIN-BUS directly * * @{ */ /** @brief Starts direct mode on channel with given baudrate, bitwidth, stopbits and parity * settings. If the direct mode is already active on the channel, it will be restarted. The command * prepares the channel with @ref BLC_dmReportConfig settings of 5ms and 8 bytes * * @param[in] handle Handle representing the channel to which the frame belongs (see @ref * BLC_getChannelHandle ) * @param baudrate The baudrate to configure while in direct mode. * @param bitwidth This parameter is not yet used and has to be set to 0. The bitwidth will be 8. * @param stopbits This parameter is not yet used and has to be set to 0. It will be 1 stopbit. * @param parity This parameter is not yet used and has to be set to 0. Parity bit is * deactivated. * @return @ref BL_OK on success, errorcode otherwise */ int BL_DLLIMPORT BLC_dmStart(BL_HANDLE handle, int baudrate, int bitwidth, int stopbits, int parity); /** @brief Configure the reporting policy of the device in respect to a timeout and/or a block of * bytes. The device will report any data read from the bus if the read data exceeds the given byte * count or after [timeout] milliseconds idle time. * * direct mode has to be active * * @param[in] handle Handle representing the channel to which the frame belongs (see @ref * BLC_getChannelHandle ) * @param[in] timeout The time in milliseconds until the bus is determined as idle resulting in a * report of data even thou less then [bytes] data was received. * @param bytes The amount of data after wich a report is generated. * @return @ref BL_OK on success, errorcode otherwise */ int BL_DLLIMPORT BLC_dmReportConfig(BL_HANDLE handle, int timeout, int bytes); /** @brief Writes data in directmode to the bus * * direct mode has to be active * * if no bus power is available, the data will be queued to be sent when bus power is available * * @param[in] handle Handle representing the channel to which the frame belongs (see @ref * BLC_getChannelHandle ) * @param[in] data The buffer containing the data to send. * @param dataSize The amount of data in the buffer. only 1023 bytes can be send to the device in * one call. * @return Number of bytes written, values <0 indicate error code. */ int BL_DLLIMPORT BLC_dmWrite(BL_HANDLE handle, const char* data, unsigned int dataSize); /** * @brief Read data in direct mode. * * reads maximum bufferSize bytes to buffer. Will wait for data for infinite amount of time. If the * DirectMode is active this function or @ref BLC_dmReadTimeout have to be called to prevent the * internal buffer from allocating all system memory. * * @param[in] handle Handle representing the channel to which the frame belongs (see @ref * BLC_getChannelHandle ) * @param[out] buffer The buffer having at least [bufferSize] space to store received data. * @param bufferSize The amount of data to read. * @return Number of bytes read, values <0 indicate error code */ int BL_DLLIMPORT BLC_dmRead(BL_HANDLE handle, char* buffer, unsigned int bufferSize); /** * @brief Same as @ref BLC_dmRead with waiting timeout in ms * * If the DirectMode is active this function or @ref BLC_dmRead have to be called to prevent the * internal buffer from allocating all system memory. * * @param[in] handle Handle representing the channel to which the frame belongs (see @ref * BLC_getChannelHandle ) * @param[out] buffer The buffer having at least [bufferSize] space to store received data. * @param bufferSize The amount of data to read. * @param timeout_ms The timeout in milliseconds after which the function returns with less then * bufferSize data read. * @return Number of bytes read, values <0 indicate error code */ int BL_DLLIMPORT BLC_dmReadTimeout(BL_HANDLE handle, char* buffer, unsigned int bufferSize, unsigned int timeout_ms); /** * @brief Issue a pulse on the bus * * with a duration of lowtime_us in us. After the pulse, any further action will be delayed * paddingtime_us if no bus power is available, the pulse will be queued to be sent when bus power * is available * * @param[in] handle Handle representing the channel to which the frame belongs (see @ref * BLC_getChannelHandle ) * @param lowtime_us The time in micro seconds to hold the output on dominant level. * @param paddingtime_us The time in mico seconds to idle before taking the next action. * @return @ref BL_OK on success, errocode otherwise */ int BL_DLLIMPORT BLC_dmPulse(BL_HANDLE handle, unsigned int lowtime_us, unsigned int paddingtime_us); /** * @brief Delay the next operation by the given time. * * this function is an alias for "@ref BLC_dmPulse(channel, 0, paddingtime_us)". If no bus power is * available, the delay will be queued to be sent when bus power is available. * * @param[in] channel A handle representing the channel to which the frame belongs * @param paddingtime_us The time in mico seconds to idle before taking the next action. * @return @ref BL_OK on success, errocode otherwise * @see @ref BLC_getChannelHandle */ int BL_DLLIMPORT BLC_dmDelay(BL_HANDLE channel, unsigned int paddingtime_us); /** * @brief Stop direct mode * * @param[in] handle Handle representing the channel to which the frame belongs * @return @ref BL_OK on success, errorcode otherwise * @see @ref BLC_getChannelHandle */ int BL_DLLIMPORT BLC_dmStop(BL_HANDLE handle); /** * @brief BLC_dmPrepare enters or exits the preparation state. * * @param[in] channel The channel handle to work on. * @param mode The preparation mode to set. 1 for entering preparation mode, 0 to exit it and * 2 to clear the preparation buffer. * @return @ref BL_OK on success, errorcode otherwise */ int BL_DLLIMPORT BLC_dmPrepare(BL_HANDLE channel, unsigned char mode); /** @}*/ /** @addtogroup command_functions * @brief List of functions to access the LIN-BUS directly * * @{ */ /** * @brief BLC_loggingStart enables the standard logging feature for a specific device or channel. * * @param[in] handle Handle representing the channel or device handle whose data should be * logged. If one want to log a single channel (e.g. the first LIN) use the * channel handle and get one logfile. If one want to log all device channels * use the connection handle and get one logfile for each channel and one for * the device channel. * @param[in] configFile The config file to load (can be created with the SimpleMenu). Setting * "configFile" to a nullptr will load these default settings: ASCII mode, * logging of frames, debug and error messages limit file size to 100MB and * max. 2 files per channel. Output path is "User/Documents/Lipowsky * Industrie-Elektronik GmbH/logs" * @return @ref BL_OK on success, errorcode otherwise * @see @ref BLC_getChannelHandle and @ref BLC_open */ int BL_DLLIMPORT BLC_loggingStart(BL_HANDLE handle, const char* configFile); /** * @brief BLC_loggingAddComment Added a string to the logfile * * @param[in] handle Handle representing the channel or device handle whose data should be logged. * If one want to log a single channel (e.g. the first LIN) use the channel * handle and get one logfile. If one want to log all device channels use the * connection handle and get one logfile for each channel and one for the device * channel. * @param[in] comment The comment string which would be added to the logfile which is linked to * the handle. * @return @ref BL_OK on success, errorcode otherwise * @see @ref BLC_getChannelHandle and @ref BLC_open */ int BL_DLLIMPORT BLC_loggingAddComment(BL_HANDLE handle, const char* comment); /** * @brief BLC_loggingStop stop and close all active logfiles which were started via @ref * BLC_loggingStart and linked to the handle. This function did not stop the logging via a SDF file * if used. * *@param[in] handle The handle of the device or channel to stop. If this is a device handle all * corresponding channels will be stopped, if this is a channel handle, only the * logging of this channel will be stopped. * @return @ref BL_OK on success, errorcode otherwise */ int BL_DLLIMPORT BLC_loggingStop(BL_HANDLE handle); /** * @brief BLC_loggingStopGlobal stop and close all active logfiles which were started via @ref * BLC_loggingStart. This function did not stop the logging via a SDF file if used. * * @return @ref BL_OK on success, errorcode otherwise */ int BL_DLLIMPORT BLC_loggingStopGlobal(); /** @}*/ /** * Incomplete features. Do not use. */ /** @addtogroup legacy * @brief List of functions to access the LIN-BUS directly * * @{ */ #ifdef WIN32 #define BL_EXCEPTION_FILTER_ATTR __stdcall #else #define BL_EXCEPTION_FILTER_ATTR #endif typedef long(BL_EXCEPTION_FILTER_ATTR* exception_filter)(struct _EXCEPTION_POINTERS* ExceptionInfo); void BL_DLLIMPORT BLC_overwriteCrashHandler(exception_filter function, const char* application_name, int dump_external_code, int show_msgbox_on_crash); int BL_DLLIMPORT BLC_runLuaCode(BL_HANDLE handle, const char* lua_code); /** @}*/ #if defined(__cplusplus) } // extern "C" #endif #endif // BABYLIN_H